7

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
4

3 に答える 3

5

これは python 3 では混乱のポイントになる可能性があります。特に、 のようなツールcsvは のみを書き込みstr、一方ftplibは のみを受け入れるためbytesです。

これに対処するには、次を使用し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)
于 2016-02-19T12:36:54.967 に答える
1

これもできます

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)
于 2017-04-05T13:56:33.000 に答える