【问题标题】:Read a file with line continuation characters in Python在 Python 中读取带有换行符的文件
【发布时间】:2013-05-05 00:48:52
【问题描述】:

我正在寻找一种很好的pythonic 方式来读取文件,并加入任何作为上述行的逻辑延续的行,如行继续字符所示。例如。

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

我在这里找到了一种解决方案:http://code.activestate.com/recipes/66064-reading-lines-with-continuation-characters,但它看起来很笨拙。在 cmets 中,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)

如果您可以一次读取整个文件,这可以正常工作。我想知道是否有任何内置函数可以处理这个问题,或者是否有人有任何其他建议。

【问题讨论】:

    标签: python io line-breaks readlines


    【解决方案1】:
    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):
            ...
    

    【讨论】:

    • 更好,只需使用next() 确实。你仍然可以让它成为一个生成器,就像我使用的(现已删除的)答案一样。
    • 感谢@MartijnPieters,我提供了生成器版本
    • 您可能想重新引入换行符,但除此之外这几乎是完美的(已经给了我的 +1)。
    猜你喜欢
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2015-07-06
    • 2018-02-23
    • 2012-07-06
    • 1970-01-01
    相关资源
    最近更新 更多