我想通过FTP上传文本字符串作为文件。
import ftplib
from io import StringIO
file = StringIO()
file.write("aaa")
file.seek(0)
with ftplib.FTP() as ftp:
ftp.connect("192.168.1.104", 2121)
ftp.login("ftp", "ftp123")
ftp.storbinary("STOR 123.txt", file)
此代码返回错误:
TypeError: 'str' does not support the buffer interface
这可能是python 3中的一个混乱点,特别是因为像csv
这样的工具只会写str
,而ftplib
只会接受bytes
。
解决此问题的一种方法是在写入之前扩展io.BytesIO
以将str
编码为bytes
:
import io
import ftplib
class StrToBytesIO(io.BytesIO):
def write(self, s, encoding='utf-8'):
return super().write(s.encode(encoding))
file = StrToBytesIO()
file.write("aaa")
file.seek(0)
with ftplib.FTP() as ftp:
ftp.connect(host="192.168.1.104", port=2121)
ftp.login(user="ftp", passwd="ftp123")
ftp.storbinary("STOR 123.txt", file)
你也可以这样做
binary_file = io.BytesIO()
text_file = io.TextIOWrapper(binary_file)
text_file.write('foo')
text_file.writelines(['bar', 'baz'])
binary_file.seek(0)
ftp.storbinary('STOR foo.txt', binary_file)
在python 3中为我工作。
content_json = bytes(json.dumps(content),"utf-8")
with io.StringIO(content_json) as fp:
ftps.storlines("STOR {}".format(filepath), fp)