当前位置: 首页 > 知识库问答 >
问题:

如何打印压缩GZIP文件的内容

暨鹭洋
2023-03-14

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

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

如何使用FileContent

编辑:这不是一个重复,因为我的gzipped文件在一个zipped文件中,我试图避免将该zip文件解压缩到磁盘上。它与zip文件中的zip文件一起工作,就像如何在Python中从zip文件中读取zip文件一样?.

共有1个答案

殷宇
2023-03-14

我创建了一个zip文件,其中包含一个从Web上抓取的gzip PDF文件。

我运行了以下代码(有两个小改动):

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

            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)  

编辑:从James R的回答中添加到GZIP文档的链接--

另外,请参见此处以获得更多文档:

http://docs.python.org/2/library/gzip.html#用法示例

我还建议阅读这篇文章,以便更深入地了解我所期望的您的问题:为什么打印到stdout的速度如此之慢?能加快速度吗?

EDIT 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')
 类似资料:
  • 问题内容: 我想使用urllib下载文件,并在保存之前对文件进行解压缩。 这就是我现在所拥有的: 最终将写入空文件。我该如何实现自己的追求? 更新的答案: 问题答案: 在写完之后,但要传递给之前,您需要寻找到开始的地方。否则它将被模块从头读取,并显示为空文件。见下文:

  • 问题内容: 我是Go的新手,无法弄清楚如何使用该软件包对我有利。基本上,我只想写一些东西到文件中,将其gzip压缩,然后通过另一个脚本直接从压缩格式读取。如果有人可以给我一个有关如何执行此操作的示例,我将不胜感激。 问题答案: 所有压缩包都实现相同的接口。您将使用以下方式进行压缩: 并解压缩:

  • 写压缩文件 # gzip_write.py import gzip import io import os outfilename = 'example.txt.gz' with gzip.open(outfilename, 'wb') as output: with io.TextIOWrapper(output, encoding='utf-8') as enc: e

  • 问题内容: 我想执行一个命令,让该命令的输出即时得到gzip’d,并且回显/准备该命令的输出。 即,类似: 除了执行该行时,我希望在标准输出中看到此内容: 问题答案: 正如评论中指出的那样,在某些情况下可能会更好。

  • Gzip 中间件 Gzip 中间件使用 gzip 压缩方案来对HTTP响应进行压缩。 使用 e.Use(middleware.Gzip()) 自定义配置 使用 e := echo.New() e.Use(middleware.GzipWithConfig(middleware.GzipConfig{ Level: 5, })) 配置 GzipConfig struct { // Skipp

  • 问题内容: 我正在使用php的功能来执行HTTP请求。为了节省带宽,我决定使用添加标题。 显然,输出一个gzip编码的字符串,所以我用来解码该编码的字符串,但是将作为参数传递的数据出错。 我知道还有另一个功能可以解压缩压缩后的数据,但是它不包含在我的PHP版本中(也许仅在SVN上可用)。 我知道cUrl可以即时解码gzip流(没有任何问题),但是有人建议我使用它而不是cUrl。 您是否知道以其他方