我有一个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行开始?有什么方法可以记住我读取文件的最后一个位置吗?
答案 0 :(得分:1)
您可以使用file.tell()
获取文件的当前位置(以字节为单位)和file.seek()
来设置它。
答案 1 :(得分:0)
您在此处记录(或保存)读取的行数。问题是,如果你开始阅读文件,你不知道这些行有多长。例如,考虑一个如下所示的文件:
line1
line number two
line3
在您的磁盘上,此文件将保存为连续流。像这样(在unix上):
line1\nline number two\nline3
现在,没有办法事先知道line3的起始位置,因为这取决于line1和line3的长度。一旦你阅读它们,你就会知道这一点,并找出\n
个字符的位置。
因此,您的简单解决方案是记录/保存您所处的实际文件位置。这是您在其他答案中看到的tellf()
。这是您在文件中的当前字符。所以你还不知道之前有多少行,但你至少知道那是你上次离开的地方。