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

标签 python gzip zip

好的,我有一个包含 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/

相关文章:

heroku - 如何在 Heroku Cedar 上的 Play Framework 1 应用上启用 GZIP 压缩?

java - (JAVA) 处理 zipstream 中的不同压缩类型

python - 没有管理员权限时如何在 Windows 中安装 Python(任何版本)?

python - 通过标准迭代总结值并存储到字典中

python: 无法打开文件 'C:\Program' : [Errno 2] 没有这样的文件或目录

Android:HTTP 通信应使用 "Accept-Encoding: gzip"

php - 从 PHP 调用 gzip 失败

jar - 正确解码 zip 条目文件名——CP437、UTF-8 还是?

json - JSON 或文本文件的最佳 zip 压缩级别?

python - 从静态方法访问静态变量