如何在python 3中通过FTP发送StringIO?

我想通过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只接受字节.

解决此问题的一种方法是在写入之前扩展io.BytesIO以将str编码为字节:

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)
点赞