在Python中通过FTP写入文件
我按照这个页面上的文档进行了操作: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"))