我想在python中这样做,但我很难过。我不能将整个文件加载到ram中而不会使事情变得不稳定,所以我想逐行阅读...任何建议都将不胜感激。
答案 0 :(得分:16)
答案 1 :(得分:3)
一个想法可能如下:
import itertools
with open('the1gfile.txt') as inf:
for i in itertools.count():
with open('outfile%d.txt' % i, 'w') as ouf:
for linenum, line in enumerate(inf):
ouf.write(line)
if linenum == 99999: break
else:
break
with
语句需要Python 2.6或更高版本,或者模块顶部需要2.5 from __future__ import with_statement
(这就是我使用老式字符串格式化来生成输出文件名的原因 - 新样式在2.5中不起作用,并且您没有告诉我们您想要使用哪个Python版本 - 当然,如果您的Python版本支持它,则替换新样式格式; - )。
itertools.count()
产生0,1,2,......等等,没有限制(只有当最后的条件break
最终执行时才终止该循环)。
for linenum, line in enumerate(inf):
一次读取一行(有一些缓冲速度)并将亚麻布设置为0,1,2 ......等等 - 我们在100,000行后断开该循环(下次,for循环将继续准确读取该离开的位置。
{且当for
循环的else:
子句执行当且仅当该循环中的break
没有,因此,如果我们读取的行少于100,000行 - 即,当输入文件已完成。请注意,如果输入文件中的行数是100,000的精确倍数,则会有一个空输出文件。
我希望这会让机制的每个部分都足够清晰......?