Python能读取并处理tar文件,但无法处理tar.gz文件?

1 投票
1 回答
673 浏览
提问于 2025-04-18 09:33

我正在写一个处理压缩文件的代码,下面是我写的一部分:

问题出在这一行:

tar = tarfile.open(tarName, 'r')

当我输入一个普通的tar文件时,这段代码可以正常工作,但当我尝试用tar.gz文件时,x.read()这一行却返回了空值,不知道为什么……tar和tar.gz在解压时有什么区别吗?

tar = tarfile.open(tarName, 'r:gz')

directory = directoryname+'/'
if not os.path.exists(directory) and not (param1 == 2):
    os.makedirs(directory)

start = time.time()
numTotal = 0;
numFound = 0;

#case 1: look for string anywhere
if (param2 == 0):

    for currentFile in tar:
        numTotal+=1;
        x=tar.extractfile(currentFile)

        if stringCheck in x.read():

          numFound +=1

          if (param1 == 2):
        continue

          new = open(directory + ntpath.basename(currentFile.name), 'w');
          x.seek(0,0)
          new.write( x.read() )
          new.close()
          if (param1 == 1):

对于

file newTarGz.tar.gz

的输出是:
newTarGz.tar.gz: gzip压缩数据,最后修改时间:2014年6月12日11:02:55,来自Unix

另外,之前的错误是因为我复制粘贴到Stack Overflow时出现的问题,已经修复了。

编辑:我在Cygwin上工作,这可能有影响。

1 个回答

0

没错!提取的方式是不同的。这是因为文件的压缩方式本身就不同。一个 .tar 文件通常是用透明的 tar 压缩方式压缩的,而 tar.gz 文件则是用“gzip”压缩的。还有其他的压缩方式,比如 tarfile 模块支持的 .bz2(使用 bzip2 压缩)、.tar.Z 等等。想了解更多细节,可以查看官方的 tarfile 文档。

撰写回答