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

问题描述 投票:0回答:3

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

我计划这样做的方法是逐个读取.gz存档中文件的文件名,并检查我的目录中是否已存在这样的文件。但据我所知,gzip无法做到这一点。

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

archive = gzipfile.GzipFile(source)

    for i in archive.getmembers():
        if os.path.isfile(destination + sep + i.name) and overwrite:
        ...

这可能吗?

python gzip gz
3个回答
2
投票

虽然.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

你也可以在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()

结果:

original filename = sometext.txt

我不相信python gzip包允许您访问原始文件名。 其他人可能会有所不同!


3
投票

.gz文件不是存档,只是压缩。如果你有一个.tar.gz文件,你可以使用tarfile


-1
投票
import tarfile

archive = tarfile.open(source)
for i in archive.getmembers():
    ...
© www.soinside.com 2019 - 2024. All rights reserved.