>> import tarfile >>> tarfile.open('/tmp/bad.tar.gz') Traceback (most-6ren">
gpt4 book ai didi

java - python tarfile.py "file could not be opened successfully"

转载 作者:行者123 更新时间:2023-11-30 10:51:33 33 4
gpt4 key购买 nike

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

>>> 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)以八个空格的形式出现。不知道从这里去哪里......

最佳答案

老实说,这个错误看起来像是在 tarfile.pynti 函数中:

n = int(nts(s) or "0", 8)

失败逻辑(或“0”)不起作用,因为 s 是空格,而不是 None,所以 int() 爆炸了。

我从 /var/lib/python2.7/ 复制了 tarfile.py 并用 try/catch 包裹了该特定行,这使我修复了:

    try:
obj.uid = nti(buf[108:116])
except InvalidHeaderError:
obj.uid = 0

不过,这是一个 hack 解决方案。真的,我更希望 python 人看一下它并修复“或“0”逻辑。

更新

原来压缩包是由 maven-assembly-plugin 在刚刚升级到 Java 7 的 Java 6 项目中创建的。通过升级 maven-assembly 解决了这个问题-插件2.5.3

关于java - python tarfile.py "file could not be opened successfully",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34686859/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com