问题
I want to upload a text string as a file via 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)
This code returns an error:
TypeError: 'str' does not support the buffer interface
回答1:
This can be a point of confusion in python 3, especially since tools like csv
will only write str
, while ftplib
will only accept bytes
.
You can deal with this is by using io.TextIOWrapper
:
import io
import ftplib
file = io.BytesIO()
file_wrapper = io.TextIOWrapper(file, encoding='utf-8')
file_wrapper.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)
回答2:
You can do this as well
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)
回答3:
Works for me in python 3.
content_json = bytes(json.dumps(content),"utf-8")
with io.StringIO(content_json) as fp:
ftps.storlines("STOR {}".format(filepath), fp)
来源:https://stackoverflow.com/questions/30449269/how-can-i-send-a-stringio-via-ftp-in-python-3