使用 python 打开损坏的 tar 文件

open corrupt tar file with python

我正在 python 的帮助下从 ftp 服务器下载 tar 文件。但是,现在我遇到了问题并收到错误 "ReadError: unexpected end of data"。我假设我的文件已损坏。我可以在终端内使用 'wget' 注释打开 python 外的文件,但我只想坚持使用 python。这是我的代码:

os.chdir(aod_ipng)
[urlretrieve('%s%s'%(url_ipng,x),'%s'%(x)) for x in ari]

for i in range(len(ari)):
    fileName = '%s'%(ari[i])
    ind = save_ipng[i].index('IVAOT')
    h5f = save_ipng[i][ind:]
    tfile = tarfile.open(fileName,'r|')
    for t in tfile:
        if t.name == '%s'%h5f:
            f = tfile.extract(t)

"ReadError: unexpected end of data"

这意味着您的文件比预期的要短,因此没有完全下载。

wget 不打开 tar 个文件,它下载文件。

通过不良连接可靠地下载大文件并不容易。如果支持 http range 请求,那么您可以在断开的连接上恢复下载。

一个好的 start 是使用请求库和 read the remote file as a stream。 然而,断开连接和恢复可能仍需由您处理。

请参阅 this question 了解如何使用 API

但请确保该文件确实是 tar。您可以使用 libmagic 进行文件格式检测。

该文件扩展名建议使用 gzip 而不是 tar。

import gzip
f = gzip.open('h5.gz', 'rb')
file_content = f.read()
f.close()