python tarfile.py“文件无法成功打开”

时间:2016-01-08 22:02:01

标签: java python python-2.7 maven-assembly-plugin

我有一个无法使用python打开的tarball:

>>> import tarfile
>>> tarfile.open('/tmp/bad.tar.gz')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "tarfile.py", line 1672, in open
    raise ReadError("file could not be opened successfully")
tarfile.ReadError: file could not be opened successfully

但我能够在命令行中解压缩文件没有问题。

$ tar -xzvf /tmp/bad.tar.gz

我已经跟踪了python tarfile代码,并且有一个函数“nti”,他们在那里转换字节。它走到了这一行:

obj.uid = nti(buf[108:116])
爆炸了。这些位(对于UID)通过八个空格。不知道从哪里开始...

1 个答案:

答案 0 :(得分:1)

老实说,这个错误似乎在tarfile.py的{​​{1}}函数中:

nti

直通逻辑(n = int(nts(s) or "0", 8) )无效,因为or "0"是空格而不是s,因此None会爆炸。

我从int()复制了tarfile.py并用try / catch包裹了该特定行,这使我感到困惑:

/var/lib/python2.7/

但这是一个黑客解决方案。我真的更喜欢python民众看一看并修复了“ try: obj.uid = nti(buf[108:116]) except InvalidHeaderError: obj.uid = 0 逻辑。

<强>更新

原来,tarball是由刚刚升级到Java 7的Java 6项目中的or "0"创建的。通过将maven-assembly-plugin升级到maven-assembly-plugin来解决问题。 / p>