使用 Python 从 FTP 站点打开 tarfile 使用 tarfile 和 urllib



我正在尝试从ftp服务器上的tar文件内部下载文件。 类似于这个 当我打开 tarfile 时,将.tar.gz文件的内容从网站读取到 python 3.x 对象中,我得到一个 ReadError(如下)

ftpURL = u'ftp://ftpprd.ncep.noaa.gov/pub/data/nccf/com/wave/prod/multi_1.20170201/multi_1.t00z.spec_tar.gz'
ftpstream = urllib.urlopen(ftpURL)
tar = tarfile.open(fileobj=ftpstream, mode='r|bz2')    # here's where i get the error 
Traceback (most recent call last):
  File "C:Anaconda2libsite-packagesIPythoncoreinteractiveshell.py", line 2885, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-20-c3e97355618c>", line 1, in <module>
    tar = tarfile.open(fileobj=ftpstream, mode='r|bz2')
  File "C:Anaconda2libtarfile.py", line 1703, in open
    t = cls(name, filemode, stream, **kwargs)
  File "C:Anaconda2libtarfile.py", line 1587, in __init__
    self.firstmember = self.next()
  File "C:Anaconda2libtarfile.py", line 2355, in next
    tarinfo = self.tarinfo.fromtarfile(self)
  File "C:Anaconda2libtarfile.py", line 1251, in fromtarfile
    buf = tarfile.fileobj.read(BLOCKSIZE)
  File "C:Anaconda2libtarfile.py", line 579, in read
    buf = self._read(size)
  File "C:Anaconda2libtarfile.py", line 598, in _read
    raise ReadError("invalid compressed data")
ReadError: invalid compressed data

我是否缺少缓冲区大小的内容?如果是这样,不熟悉缓冲区大小,我在哪里可以找到有关所需缓冲区大小的特定信息,我必须将大小增加一倍和三倍无济于事。 我也尝试了一些文件。 我可以手动下载文件并在我的机器上打开它....任何帮助都非常感谢

仔细看看签名:

tarfile.open(name=None, mode='r', fileobj=None, bufsize=10240, **kwargs)

和描述:

如果给定,fileobj 可以是任何具有 read() 或 write() 的对象 方法(取决于模式)。bufsize 指定块大小和 默认为 20 * 512 字节。将此变体与例如 sys.stdin,套接字文件对象或磁带设备。然而,这样的 TarFile 对象受到限制,因为它不允许随机访问,请参阅 例子。

你的意思是:

tar = tarfile.open(fileobj=ftpstream, mode='r|bz2')

最新更新