Python 2.7。
from urllib import urlretrieve
urlretrieve("ftp://ftp.wwpdb.org/pub/pdb/data/structures/divided/mmCIF/27/127d.cif.gz", "file1")
urlretrieve("ftp://ftp.wwpdb.org/pub/pdb/data/structures/divided/mmCIF/27/127d.cif.gz", "file2")第一次下载正确,但第二次下载失败:
Traceback (most recent call last):
  File "C:/Jacek/Python/untitled/test2.py", line 3, in <module>
    urlretrieve("ftp://ftp.wwpdb.org/pub/pdb/data/structures/divided/mmCIF/27/127d.cif.gz", "file2")
  File "C:\Python27\lib\urllib.py", line 98, in urlretrieve
    return opener.retrieve(url, filename, reporthook, data)
  File "C:\Python27\lib\urllib.py", line 245, in retrieve
    fp = self.open(url, data)
  File "C:\Python27\lib\urllib.py", line 213, in open
return getattr(self, name)(url)
  File "C:\Python27\lib\urllib.py", line 558, in open_ftp
    (fp, retrlen) = self.ftpcache[key].retrfile(file, type)
  File "C:\Python27\lib\urllib.py", line 906, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "C:\Python27\lib\ftplib.py", line 334, in ntransfercmd
    host, port = self.makepasv()
  File "C:\Python27\lib\ftplib.py", line 312, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "C:\Python27\lib\ftplib.py", line 830, in parse227
    raise error_reply, resp
IOError: [Errno ftp error] 200 TYPE is now 8-bit binary在python 3(有相应版本的url检索)上,这一工作就像预期的一样--这两个下载都成功了。
这是在Python2.7上解决这个问题的一种方法吗?
(当然,您可以说下载两次相同的文件是没有意义的。我同意。在测试一个模块试图下载具有不同参数的文件时,我遇到了这个问题(因为它与问题没有什么共同之处,所以我简化了示例代码),我对这种奇怪的行为感到惊讶。
发布于 2016-10-06 16:02:40
不幸的是,Python2.7中的urlretrieve有问题。在Python2.7中,名为url检索的重复工作由HTTP,而不是FTP工作。原因是ftplib通过ftplib一次又一次地发送PASV。幸运的是,当ftp下载文件时,我们可以在call检索之前调用urlcleanup。文档是这里。
发布于 2016-10-06 07:00:04
来自用于Python2的for检索的文档
If the URL points to a local file, or a valid cached copy of the object exists, the object is not copied
因此,第一印象是库将避免下载文件两次。
你试过把文件写在不同的文件上吗?
from urllib import urlretrieve
urlretrieve("ftp://ftp.wwpdb.org/pub/pdb/data/structures/divided/mmCIF/27/127d.cif.gz", "/tmp/file1.gz")
urlretrieve("ftp://ftp.wwpdb.org/pub/pdb/data/structures/divided/mmCIF/27/127d.cif.gz", "/tmp/file2.gz")https://stackoverflow.com/questions/39889389
复制相似问题