Python直接在FTP中编写创建文件

时间:2014-09-09 00:43:32

标签: python ftp

我希望从python直接写入我的FTP站点,而不存储临时文件 在磁盘上, 类似的东西:

ftp = FTP('ftp.mysite.com')
ftp.login('un','pw')
ftp.cwd('/')
ftp.storbinary('STOR myfile.html', 'text to store', 'rb')

这甚至可能吗? 非常感谢你。

2 个答案:

答案 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版本。