我想用pythonftplib将一个文件从一个ftp站点发送到另一个ftp站点,以避免文件读/写过程。在
我创建了一个字节流:myfile=BytesIO()
我用retrbinary成功地从ftp site one检索到一个图像文件:
^{pr2}$
我可以将此内存对象保存到常规文件中:fot=open('casab.jpg', 'wb')
fot=myfile.readvalue()
但是我不能用storbinary通过ftp发送这个流。我以为这会奏效:ftp_two.storbinary('STOR magnafoto.jpg', myfile.getvalue())
但没有。我收到一条以'buf=结尾的长错误消息fp.读取(块大小)
AttributeError:“str”对象没有属性“read”
我也尝试过许多荒谬的组合,但都没有成功。顺便说一句,我也很困惑我到底在干什么我要写. 不是吗我要写() ? 在
我也不知道这个缓冲区的用途和要求。我想要的是不是太复杂了?我应该在我的系统中用一个中间的写/读来乒乓文件吗?所有人
编辑:多亏了阿巴内特,我把事情弄清楚了。作为记录,storbinary参数是错误的,并且我的文件.seek在发送流之前需要(0)来“倒带”。这是一个在两个ftp地址之间移动文件的有效代码段,无需中间物理文件写入:import ftplib as ftp
from io import BytesIO
ftp_one=ftp.FTP(address1, user1, pass1)
ftp_two=ftp.FTP(address2, user2, pass2)
myfile=BytesIO()
ftp_one.retrbinary ('RETR imageoldname.jpg', myfile.write)
myfile.seek(0)
ftp_two.storbinary('STOR imagenewname.jpg', myfile)
ftp_one.close()
ftp_two.close()
myfile.close()