据我所知,用ftp创建一个空文件是不可能的,你必须在本地驱动器上创建一个空文件,上传它,然后在完成后删除它。我想知道是否有可能做类似的事情:
class FakeFile:
def read(self):
return '\x04'
ftpinstance.storbinary('stor fe', FakeFile())
我认为这可能有用,因为storbinary的文档说它需要一个带有方法'read'的对象并调用它直到它返回EOF,而\ x04是ASCII EOF字符。我试过这个,文件最终在服务器上是一个随机数千字节大。我误解了什么吗?
答案 0 :(得分:4)
无需实现类似文件的类,只需使用内置模块StringIO
(或Python 3中的BytesIO
)中的内存中文件:
import ftplib
import cStringIO
ftp = ftplib.FTP('ftp.example.com')
ftp.login('user', 'pass')
voidfile = cStringIO.StringIO('')
ftp.storbinary('STOR emptyfile.foo', voidfile)
ftp.close()
voidfile.close()
答案 1 :(得分:2)
在现代使用中,文件结尾不是ASCII 4。这是XMODEM和电传打字时代的过时用法。试试这个:
class FakeFile:
def read(self, size=0):
return ''
因为空读是EOF。
使用当前代码,您应该获得一个完全由'\x04'
个字符组成的随机长度文件。这是因为它在读取时似乎总是有数据。 ^ _-
答案 2 :(得分:0)
实际上,该文档的内容是“读取直至EOF”。我通过使read函数返回一个空字符串来解决这个问题。