我希望从python直接写入我的FTP站点,而不存储临时文件 在磁盘上, 类似的东西:
ftp = FTP('ftp.mysite.com')
ftp.login('un','pw')
ftp.cwd('/')
ftp.storbinary('STOR myfile.html', 'text to store', 'rb')
这甚至可能吗? 非常感谢你。
答案 0 :(得分:12)
正如the docs所说:
以二进制传输模式存储文件。 cmd 应该是适当的
STOR
命令:"STOR filename"
。 file 是一个文件对象(以二进制模式打开),在大小为 blocksize 的块中使用read()
方法读取EOF直到EOF,以提供要存储的数据...
因此,您需要使用适当的read
方法为其提供类似文件的对象。
字符串不是类似文件的对象,而是io.BytesIO
。所以:
import io
bio = io.BytesIO(b'text to store')
ftp.storbinary('STOR myfile.html', bio)
另外,请注意我没有传递'rb'
参数。 storbinary
的第三个参数是 blocksize ,而'rb'
显然不是有效的块大小。
如果您需要使用Python 2.5或更早版本,请参阅Dan Lenski的回答。
如果您需要使用Python 2.6-2.7,并且类似文件的对象的性能很重要(它不在这里,但在某些情况下可能会这样),而您只关心CPython,使用他的答案,但用cStringIO
代替StringIO
。 (普通StringIO
在2.x中较慢,io.BytesIO
在3.3之前更慢。)
答案 1 :(得分:6)
您是否尝试使用StringIO
object,它像文件一样嘎嘎叫但只是一个字符串?
from ftplib import *
import StringIO
ftp = FTP('ftp.mysite.com')
ftp.login('un','pw')
ftp.cwd('/')
ftp.storbinary('STOR myfile.html', StringIO.StringIO('text to store'))
编辑:@abarnert's answer是Python3的等价物。我的是Python2版本。