【发布时间】:2016-11-08 21:37:27
【问题描述】:
我有一个 3,000,000,000 行的文本文件。我用下面这个命令打开它
with open("/data/tmp/tbl_show_follow.txt") as infile:
但有时我需要终止我的 Python 脚本以停止读取此文件,而下一次我需要从上次读取的位置开始读取。我当前的解决方案是使用counter_i 来记住位置并每 100,000 行打印到日志
20161108 21:19 last position : 100000
20161108 22:34 last position : 200000
20161108 23:34 last position : 300000
.......
20161408 23:34 last position : 200000000
我再次运行 python 脚本,我需要像这样更改条件
count_i = 0
with open("/data/tmp/tbl_show_follow.txt") as infile:
for line in infile:
if count_i > 300000:
do sth ...
但是如果我的最后一个位置是 200,000,000 并且我停止了我的 Python 脚本,那么下次我需要从头读取文件并从 1 计数到 200,000,000。我认为这样做很愚蠢,如何从第 200,000,000 行开始?有什么方法可以记住我最后读取文件的位置吗?
【问题讨论】:
-
只有知道最后读取的位置是bytes,而不是lines,才能跳转到文件中。
-
对于一个包含这么多行的文件,可能值得将其分成多个文件,即 tbl_show_follow.1.txt、tbl_show_follow.2.txt 等等。如果您需要跟踪在杀死和运行脚本之间处理了多少行,您可以简单地在每 X 行的文件中写入从哪个文件开始。如果该文件不存在,您可以从头开始。我还建议使用生成器从文本中读取,以避免在内存中保存任何内容。
标签: python python-2.7 file