3

私は、ファイルを読み取り、行継続文字で示されるように、上記の行の論理的な継続である行を結合する素晴らしいpythonicの方法を探しています。例えば

Here is a normal line.
This line continues over  \
two lines.
This line continues over\
three \
lines.

ここで 1 つの解決策を見つけました: http://code.activestate.com/recipes/66064-reading-lines-with-continuation-charactersですが、扱いにくいようです。ジェネレーターを使用したコメントに、Daniel Wang からの素晴らしい解決策があります。

def loglines(rawdata):
    lines = []
    for i in rawdata.splitlines():
        lines.append(i)
        if not i.endswith("\\"):
            yield "".join(lines)
            lines = []
    if len(lines)>0: yield "".join(lines)

ファイル全体を一度に読み取ることができれば、これは問題なく機能します。これを処理する組み込み関数があるかどうか、または他の提案があるかどうか疑問に思いました。

4

1 に答える 1

14
with open("data.txt") as fin:
    for line in fin:
        line = line.rstrip('\n')
        while line.endswith('\\'):
            line = line[:-1] + next(fin).rstrip('\n')
        print line
        ...

必要に応じて、これをジェネレーターに引き出すこともできます

def continuation_lines(fin):
    for line in fin:
        line = line.rstrip('\n')
        while line.endswith('\\'):
            line = line[:-1] + next(fin).rstrip('\n')
        yield line


with open("long.txt") as fin:
    for line in continuation_lines(fin):
        ...
于 2013-05-10T10:48:28.920 に答える