nks*_*ya1 12 python text jython file
我试图在文本文件的末尾附近找到一个字符串.问题是文本文件的大小可能有很大差异.从3MB到4GB.但每次我尝试运行脚本在大约3GB的文本文件中找到此字符串时,我的计算机内存不足.所以我想知道是否有任何方式让python找到文件的大小,然后读取它的最后一兆字节.
我目前使用的代码如下,但正如我之前所说,我似乎没有足够大的内存来读取这么大的文件.
find_str = "ERROR"
file = open(file_directory)
last_few_lines? = file.readlines()[-20:]
error? = False
for line in ?last_few_lines?:
if find_str in line:
? error? = True
Run Code Online (Sandbox Code Playgroud)
Ary*_*rog 26
使用file.seek():
import os
find_str = "ERROR"
error = False
# Open file with 'b' to specify binary mode
with open(file_directory, 'rb') as file:
file.seek(-1024 * 1024, os.SEEK_END) # Note minus sign
if find_str in file.read():
error = True
Run Code Online (Sandbox Code Playgroud)
您必须在打开文件时指定二进制模式,否则您将获得"未定义的行为".在python2下,无论如何它都可以工作(它对我来说),但是如果在默认文本模式下打开文件,python3下seek()将引发io.UnsupportedOperation异常.python 3文档在这里.虽然从那些文档中不清楚,SEEK_*常量仍然在os模块中.
更新:使用with语句进行更安全的资源管理,如Chris Betti所建议的那样.