如何从 .gz 存档中获取原始文件的名称?

Ale*_*ter 2 python gzip

我正在编写一个实用程序,它接受 .gz 存档并检查其内容是否已存在于指定文件夹中。如果不这样做,它将在那里提取存档。

我计划执行此操作的方法是一一读取 .gz 存档中文件的文件名,并检查我的目录中是否已存在此类文件。但据我了解,gzip 不可能做到这一点。

理想情况下,我正在寻找这样的东西:

archive = gzipfile.GzipFile(source)

    for i in archive.getmembers():
        if os.path.isfile(destination + sep + i.name) and overwrite:
        ...
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Rol*_*ony 5

虽然 .gz 文件确实只是一个压缩文件,但原始文件名可以被截断,或者实际上可以重命名压缩的 .gz 文件。 gunzip可以被告知使用该-N标志提供原始文件名,如果与-l(减去小写 L)一起使用,它将告诉您原始文件名而不解压缩文件。
例如:

$ gzip sometext.txt
$ mv sometext.txt.gz othertext.gz
$ gunzip -Nl othertext.gz
         compressed        uncompressed  ratio uncompressed_name
                 58                 113  76.1% sometext.txt
Run Code Online (Sandbox Code Playgroud)

你也可以用 python 破解这个问题。

from subprocess import check_output
size_name = check_output(['gunzip', '-Nlq','othertext.gz'])
size_name = size_name.strip().split("%",1)
print "original filename =",size_name[1].strip()
Run Code Online (Sandbox Code Playgroud)

结果:

original filename = sometext.txt
Run Code Online (Sandbox Code Playgroud)

我不相信 python gzip 包允许您访问原始文件名。
别人可能知道不同!

  • 使用包 https://github.com/PierreSelim/gzinfo 可以获得原始文件名,如本文所述:/sf/ask/4630636881/ -原始文件名和文件扩展名?noredirect=1#comment116963296_66151955 (2认同)