1

所以我关注了这个页面上的文档:http: //docs.python.org/library/ftplib.html#ftplib.FTP.retrbinary

也许我对“retrbinary”的作用感到困惑……我认为它会检索二进制文件,然后我可以从那里打开它并写出该文件。

这是给我带来问题的线...

ftp.retrbinary('RETR temp.txt',open('temp.txt','wb').write)    

我不明白的是我想写到 temp.txt,所以我在尝试

ftp.retrbinary('RETR temp.txt',open('temp.txt','wb').write('some new txt'))    

但我遇到了错误,我能够建立一个 FTP 连接,执行 pwd()、cwd()、rename() 等。

ps 我正在尝试尽可能多地用谷歌搜索,谢谢!

4

2 回答 2

2

如果您尝试从服务器下载文件,看起来原始代码应该可以工作。该retrbinary命令接受您指定的函数对象(即函数名,()后面不带 no);每当有一段数据(二进制文件)到达时都会调用它。在这种情况下,它将调用writeopen编辑的文件的方法。这与 略有不同retrlines,因为retrlines将假定数据是文本文件,并将适当地转换换行符(但损坏,例如图像)。

通过进一步阅读,您似乎正在尝试写入服务器上的文件。在这种情况下,您需要传递一个文件对象(或其他read具有类似文件的方法的对象)以供存储函数调用:

ftp.storbinary("STOR test.txt", open("file_on_my_computer.txt", "rb"))
于 2009-06-10T03:34:54.477 回答
0

ftp.retrbinary 将第二个参数作为回调函数,它可以直接写入文件对象的方法 ieopen('temp.txt','wb').write 但你直接调用 write

您可以提供自己的回调并对数据做任何您想做的事情

def mywriter(data):
    print data
ftp.retrbinary('RETR temp.txt', mywriter)
于 2009-06-10T03:37:56.817 回答