如何从上次读取位置读取文件?

时间:2016-11-08 13:25:12

标签: python python-2.7 file

我有一个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行开始?有什么方法可以记住我读取文件的最后一个位置吗?

2 个答案:

答案 0 :(得分:1)

您可以使用file.tell()获取文件的当前位置(以字节为单位)和file.seek()来设置它。

答案 1 :(得分:0)

您在此处记录(或保存)读取的行数。问题是,如果你开始阅读文件,你不知道这些行有多长。例如,考虑一个如下所示的文件:

line1
line number two
line3
在您的磁盘上

,此文件将保存为连续流。像这样(在unix上):

line1\nline number two\nline3

现在,没有办法事先知道line3的起始位置,因为这取决于line1和line3的长度。一旦你阅读它们,你就会知道这一点,并找出\n个字符的位置。

因此,您的简单解决方案是记录/保存您所处的实际文件位置。这是您在其他答案中看到的tellf()。这是您在文件中的当前字符。所以你还不知道之前有多少行,但你至少知道那是你上次离开的地方。