gpt4 book ai didi

python - 如何打印压缩的 gzip 文件的内容

转载 作者:太空宇宙 更新时间:2023-11-03 18:43:03 26 4
gpt4 key购买 nike

好的,我有一个包含 gz 文件 (unix gzip) 的 zip 文件。

这就是我所做的——

def parseSTS(file):
import zipfile, re, io, gzip
with zipfile.ZipFile(file, 'r') as zfile:
for name in zfile.namelist():
if re.search(r'\.gz$', name) != None:
zfiledata = zfile.open(name)
print("start for file ", name)
with gzip.open(zfiledata,'r') as gzfile:
print("done opening")
filecontent = gzfile.read()
print("done reading")
print(filecontent)

这给出了以下结果--

>>> 
start for file XXXXXX.gz
done opening
done reading

然后永远保持这样,直到崩溃......

我可以使用文件内容做什么?

编辑:这不是重复的,因为我的 gzip 压缩文件位于压缩文件中,并且我试图避免将该 zip 文件提取到磁盘。它可以按照 How to read from a zip file within zip file in Python? 处理 zip 文件中的 zip 文件。 .

最佳答案

我创建了一个 zip 文件,其中包含从网上获取的经过 gzip 压缩的 PDF 文件。

我运行了这段代码(有两个小改动):

1)修复了 def 语句下所有内容的缩进(我也在您的问题中更正了这一点,因为我确信它对您来说是正确的,否则不会解决您遇到的问题)。

2)我改变了:

            zfiledata = zfile.open(name)
print("start for file ", name)
with gzip.open(zfiledata,'r') as gzfile:
print("done opening")
filecontent = gzfile.read()
print("done reading")
print(filecontent)

至:

            print("start for file ", name)
with gzip.open(name,'rb') as gzfile:
print("done opening")
filecontent = gzfile.read()
print("done reading")
print(filecontent)

因为您将文件对象而不是字符串传递给 gzip.open。我不知道如果没有这种更改,您的代码将如何执行,但在我修复它之前,它对我来说一直崩溃。

编辑:添加来自 James R 的 GZIP 文档链接的回答--

此外,请参阅此处以获取更多文档:

http://docs.python.org/2/library/gzip.html#examples-of-usage

结束编辑

现在,由于我的 gzip 文件很小,我观察到的行为是在打印 done read 后暂停大约 3 秒,然后输出 filecontent 中的内容>.

我建议在打印“完成阅读”后添加以下调试行 - print len(filecontent)。如果这个数字非常非常大,请考虑不要一次性打印整个文件内容。

我还建议阅读此内容,以更深入地了解我所期望的您的问题:Why is printing to stdout so slow? Can it be sped up?

编辑 2 - 如果您的系统不处理 zip 文件上的文件 io,则另一种选择,不会导致上述文件错误:

def parseSTS(afile):
import zipfile
import zlib
import gzip
import io
with zipfile.ZipFile(afile, 'r') as archive:
for name in archive.namelist():
if name.endswith('.gz'):
bfn = archive.read(name)
bfi = io.BytesIO(bfn)
g = gzip.GzipFile(fileobj=bfi,mode='rb')
qqq = g.read()
print qqq

parseSTS('t.zip')

关于python - 如何打印压缩的 gzip 文件的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20100079/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com