1

我在 Windows 上使用 python 2.7.6,并且使用 tarfile 模块将文件提取为 gzip 文件。的mode选项tarfile.open()设置为"r:gz"。在 open 调用之后,如果我要通过 打印存档的内容tarfile.list(),我会在列表中看到以下目录:

./静态分析 Part 1.v1/

但是,在我调用 tarfile.extractall() 之后,我在提取的文件列表中看不到上述目录,而是看到以下内容:

é™æ€åˆ†æž Part 1.v1/

如果我要通过 7zip 解压缩存档,我会看到一个与上面第一项同名的目录。所以,很明显, extractall() 方法搞砸了,但我不知道如何解决这个问题。

4

1 回答 1

1

我了解到 tar 不会将编码信息保留为存档的一部分,并将文件名视为原始字节序列。因此,我看到的输出tarfile.extractall()只是原始字符序列,该序列包含压缩之前的文件名。为了获得重新创建原始文件名的方法extractall(),我发现您必须在调用. 就我而言,以下方法起到了作用:membersTarFileextractall()

  modeltar = tarfile.open(zippath, mode="r:gz")
  updatedMembers = []
  for m in modeltar.getmembers():
    m.name = unicode(m.name, 'utf-8')
    updatedMembers.append(m)
  modeltar.extractall(members=updatedMembers, path=dbpath)

上面的代码是基于这个超级用户的答案:https ://superuser.com/a/190786/354642

于 2016-06-21T23:09:17.120 回答