我想逐行读取类似文件的对象。类似于文件的对象包含以下方法:
我无法读取大于2GB的文件的全文,因此无法执行以下操作:
for line in file_object.read():
dostuff(line)
我测试了一些逐行读取的方法:对于很小的文件,这些方法很好,但是对于很大的文件,它们是如此之慢。无论如何,它们比File readline()慢得多。 这是我尝试的示例:
text = ''
while True:
char = file_object.read(1)
if char == '':
return ''
text += buffer + char
if char == '\n':
pos_newline = text.find('\n')
current_offset += pos_newline + 1
buffer = text[pos_newline + 1:]
line = text[:pos_newline]
return line
我还尝试一次读取10/50/100个字符。
我只能使用标准库。
编辑:“文件状”不可重复。
答案 0 :(得分:2)
您可以使用
逐块阅读while True:
chunk = f.read(CHUNK_SIZE)
if chunk == '':
# we've reached the end
break
# process chunk
但是很可能您拥有的任何类似文件的对象都可以直接迭代以获取行。
for line in f:
# I don't have readline, but I work anyway hee hee!