在python中的字符串上为“for each”循环更改分隔符

时间:2013-07-07 02:16:33

标签: python

我需要通过逐行流式传输来读取python中的输入文本文件。这意味着逐行加载文本文件而不是一次加载到内存中。但我的行分隔符不是空格,它们是任意字符。

这是Stack Overflow上用于逐行加载文件的方法:

with open("log.txt") as infile:
    for line in infile:
        do_something_with(line)

以上是完美的,但我需要将分隔符从空格更改为不同的字符。

如何做到这一点?谢谢。

2 个答案:

答案 0 :(得分:5)

import re
def open_delimited(filename, delimiter, chunksize=1024, *args, **kwargs):
    with open(filename, *args, **kwargs) as infile:
        remainder = ''
        for chunk in iter(lambda: infile.read(chunksize), ''):
            pieces = re.split(delimiter, remainder+chunk)
            for piece in pieces[:-1]:
                yield piece
            remainder = pieces[-1]
        if remainder:
            yield remainder

for line in open_delimited("log.txt", delimiter='/'):
    print(repr(line))

答案 1 :(得分:1)

Python没有本机构造。您可以编写一个生成器,一次读取一个字符并累积它们,直到您有一个完整的分隔项。

def items(infile, delim):
    item = []
    c = infile.read(1)
    while c:
        if c == delim:
            yield "".join(item)
            item = []
        else:
            c = infile.read(1)
            item.append(c)
    yield "".join(item)

with open("log.txt") as infile:
    for item in items(infile, ","):   # comma delimited
        do_something_with(item)

如果以块(例如,64K左右)读取文件并将其拆分,您将获得更好的性能。然而,这个逻辑更复杂,因为一个项目可能被分割成块,所以我不会在这里讨论,因为我不是100%确定我做对了。 : - )