在Python中增量读取大型多部分压缩文本文件
我有一个非常大的压缩文件,它被分成了多个部分,每个部分都是一个压缩档案,里面只有一个文件。我没有足够的资源来把这些档案合并在一起或者解压缩它们(原始文本文件几乎有1TB)。
我想逐行解析这个文本文件,理想情况下可以使用类似下面的方式:
import zipfile
for zipfilename in filenames:
with zipfile.ZipFile(zipfilename) as z:
with z.open(...) as f:
for line in f:
print line
这可能吗?如果可以的话,我该如何读取这个文本文件:
- 不占用太多内存(显然,加载整个文件到内存中是不现实的)
- 不解压任何压缩文件
- (理想情况下)不合并这些压缩文件
提前感谢你的帮助。
1 个回答
4
我来试试解释一下。
如果你的压缩文件是所谓的“分割档案”,根据压缩文件格式的定义,你将无法使用Python的zipfile库或者unzip
命令来读取它们。
但如果你处理的是一个单独的压缩文件,这个文件是通过split
命令或者类似的方式分割的,那么你可能可以在Python中直接提取和读取它的内容。
你需要写一个“类文件”的自定义类,这个类要能接受seek()和read()这些方法(可能还会有其他方法),并在分割的文件块上执行这些操作。
seek()方法需要计算要读取哪个压缩文件,打开它(如果当前还没有打开的话),然后根据偏移量的差值在这个文件上执行seek()操作。
read()方法会从当前打开的文件块中读取内容,并处理文件结束的情况,这样它就会打开下一个文件块并完成读取。
在你写好并测试这个类之后,你只需要调用ZipFile构造函数,把你这个类的实例作为“虚拟压缩”文件对象传进去,就可以打开了。