使用python ftplib以二进制格式下载zip文件

时间:2012-12-10 20:34:45

标签: python-2.6 zipfile

我已经发布了一些似乎相关的问题,但这些问题与我所遇到的问题并不完全相同:

我正在使用python的ftplib模块和zipfile以二进制格式从ftp下载zip文件。但是,出于某种原因,下载的zip文件似乎在ascii中。

我确保在我下载的文件路径中不存在前导/(以匹配zip规范)。

outFile = zipfile.ZipFile(local_file_path, 'w')
myftp.retrbinary('RETR %s' %i, outFile.write(i))  #i - target file path on ftp server

此代码未能给我以下错误:

st = os.stat(filename)
OSError: [Errno 2] No such file or directory: //$i

我尝试为二进制添加'b'选项,但zipfile似乎不喜欢它:

outFile = zipfile.ZipFile(local_file_path, 'wb')

这会引发错误:

RuntimeError: ZipFile() requires mode "r", "w", or "a"

我正在使用python v2.6。

我做错了什么以及如何解决?

1 个答案:

答案 0 :(得分:0)

根据python doc(http://docs.python.org/2/library/ftplib.html),似乎retrbinary将回调作为第二个参数:

>>> ftp.retrbinary('RETR README', open('README', 'wb').write)
'226 Transfer complete.'
>>> ftp.quit()

文档说:

  

FTP.retrbinary(命令,回调[,maxblocksize [,rest]])

     

二进制传输模式检索文件。命令应该是一个   适当的RETR命令:'RETR filename'。 回调功能是   使用单个字符串参数调用每个接收的数据块   给出数据块。 [...]

在您的示例中,它应为outfile.write(而不是outfile.write(i))。

>>> ftp.retrbinary('RETR %s' % i, outFile.write)