我正在尝试使用zipfile模块从归档文件中读取文件。未压缩的文件大小约为3GB,而压缩文件大小为200MB。由于我需要逐行处理压缩文件,因此不想将它们都加载到内存中。目前,使用以下代码时注意到了内存过度使用:
import zipfile
f = open(...)
z = zipfile.ZipFile(f)
for line in zipfile.open(...).readlines()
print line
我使用SharpZipLib在C#中完成了这个操作:
var fStream = File.OpenRead("...");
var unzipper = new ICSharpCode.SharpZipLib.Zip.ZipFile(fStream);
var dataStream = unzipper.GetInputStream(0);
dataStream未经压缩,我似乎找不到在Python中完成此操作的方法。希望能得到帮助。
z.open()
似乎不允许使用r
选项。当你需要在for line in f:
块中运行一些逻辑时,这就会发挥作用。例如:if line.find("YES") != -1: print('yay')
。这会返回一个TypeError
。你必须在"YES"
前面加上一个b
才能使它工作。 - ericOnline.decode()
的位置。还是我要将其包装在函数调用周围?我会尝试实验一下。 - ericOnlinewith io.TextIOWrapper(z.open(...), encoding='utf-8') as f:
- Ali Akbar