在python中通过FTP写入文件

时间:2009-06-10 03:24:14

标签: python ftp ftplib

所以我按照本页面上的文档进行操作: 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(),重命名()等等。

P.S。我想尽可能地谷歌这一点,谢谢!

2 个答案:

答案 0 :(得分:2)

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

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

ftp.storbinary("STOR test.txt", open("file_on_my_computer.txt", "rb"))

答案 1 :(得分:0)

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

你可以提供自己的回调,并做任何你想做的数据

def mywriter(data):
    print data
ftp.retrbinary('RETR temp.txt', mywriter)