我需要逐行读取python中的输入文本文件。这意味着将文本文件逐行加载,而不是一次全部加载到内存中。但是我的行分隔符不是空格,它们是任意字符。
这是 Stack Overflow 上逐行加载文件的方法:
with open("log.txt") as infile:
for line in infile:
do_something_with(line)
以上是完美的,但是我需要将分隔符从空格更改为不同的字符。
如何才能做到这一点?谢谢你。
我需要逐行读取python中的输入文本文件。这意味着将文本文件逐行加载,而不是一次全部加载到内存中。但是我的行分隔符不是空格,它们是任意字符。
这是 Stack Overflow 上逐行加载文件的方法:
with open("log.txt") as infile:
for line in infile:
do_something_with(line)
以上是完美的,但是我需要将分隔符从空格更改为不同的字符。
如何才能做到这一点?谢谢你。
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))
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% 确定我会做对。:-)