在Python中通过FTP写入文件

1 投票
2 回答
7167 浏览
提问于 2025-04-15 12:08

我按照这个页面上的文档进行了操作: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()等操作。

附言:我正在尽量多地在网上搜索这个问题,谢谢!

2 个回答

0

ftp.retrbinary这个函数的第二个参数是一个回调函数。你可以直接用文件对象的方法,比如open('temp.txt','wb').write,来写入数据。不过,你现在是直接调用write方法。

你也可以提供自己的回调函数,这样就可以对数据进行你想做的任何操作。

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

看起来原来的代码应该是可以工作的,如果你是想从服务器下载一个文件的话retrbinary这个命令接受一个你指定的函数对象(也就是说,函数的名字后面不加()),每当有一段数据(一个二进制文件)到达时,它就会被调用。在这种情况下,它会调用你open打开的文件的write方法。这和retrlines稍微有点不同,因为retrlines会假设数据是一个文本文件,并会适当地转换换行符(但可能会损坏,比如说,图像文件)。

经过进一步阅读,看起来你是想在服务器上写入一个文件。在这种情况下,你需要传递一个文件对象(或者其他一些有read方法的对象,行为像文件)给存储函数调用:

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

撰写回答