Python 从当前行读取文件
我在用Python处理一个追踪文件时遇到一个问题,这个文件有十亿行数据。
我想做的是,程序需要在文件中找到一行特定的内容(比如说是第x行),然后从这一行开始,再去找另一个符号。如果找到了这个符号,就从第x行重新开始继续搜索下一个。
我现在的做法是这样的,但问题是每次都需要重新打开文件,从头开始读,这样才能找到匹配的内容(也就是行号大于x,并且包含我想要的符号)。对于这么大的追踪文件,这样处理起来太慢了。
1.
for line in file.readlines()
i++ #update the line number
if i > x:
if (line.find()):
或者:
for i, line in enumerate(open(file)):
if i > x:
if ....
有没有人能给我一些更好的建议呢?
谢谢
2 个回答
0
我建议你使用随机访问,并记录下每一行的起始位置。可以这样做:
index = []
fh = open(gash.txt)
for line in fh:
if target in line:
index.append(fh.tell() - len(line))
然后,当你想要回忆起内容时,可以用 fh.seek(index[n])
来定位。
这里有几个需要注意的地方:
要注意,索引位置和行号是不一样的。如果你需要行号,可以考虑使用字典,把行号当作键来存储。
在Windows系统上,你需要把文件位置调整为 -1。这是因为"\r"这个字符被去掉了,所以在
len(line)
中看不到它。
2
如果文件的内容是稳定的,你可以使用 fileobj.tell()
来记住你在文件中的位置。下次想要回到这个位置时,可以用 fileobj.seek(pos)
来返回到之前的位置。
不过,这个方法只适用于你没有把文件对象当作迭代器使用的情况(也就是说,不要用 for line in fileobject
或 next(fileobject)
),因为这样会使用一个提前读取的缓冲区,这样就无法准确知道你的位置了。
相反,你可以使用:
for line in iter(fileobj.readline, ''):
这样你仍然可以在迭代的情况下使用 fileobj
。