python - 如何在Python 3中通过FTP从内存上传数据?

标签 python ftp upload ftplib

我想通过 FTP 将内存中的各种数据(数组内容、静态 html 代码等)上传到网络服务器。

这仅适用于一个基本字符串“Hello World”:

from ftplib import FTP
import io
...

bio = io.BytesIO(b'Hello World')
ftp.storbinary('STOR index.html', bio)

但是,我无法正确上传数据,例如:

datalog = array([['Temperature', 0, 0], ['Humidity', 0, 0]])
html_code = '<head><title></title></head><body>display here</body></html>

最佳答案

您可以上传文件,但不能上传变量。

您可以使用BytesIOStringIO使用您的数据创建文件并上传。它们具有像普通文件一样的功能 - 即。 bio.write(html_code.encode())

from ftplib import FTP
import io

text = '<head><title></title></head><body>display here</body></html>'

bio = io.BytesIO()
bio.write(text.encode())
bio.seek(0)  # move to beginning of file

ftp.storbinary('STOR index.html', bio)

对于datalog,您可以使用模块json来创建包含所有数据的字符串

from ftplib import FTP
import io

import json

datalog = ([['Temperature', 0, 0], ['Humidity', 0, 0]])
text = json.dumps(datalog)

bio = io.BytesIO()
bio.write(text.encode())
bio.seek(0)  # move to beginning of file

ftp.storbinary('STOR data.json', bio)

编辑:模块 csv 的示例,它不能直接与 BytesIO 一起使用,但需要字符串文件。

from ftplib import FTP
import io

import csv

data = [['Temperature', 0, 0], ['Humidity', 0, 0]]

bio = io.BytesIO()
iow = io.TextIOWrapper(bio)  # create String wrapper

csv_writer = csv.writer(iow) # create csv writer
csv_writer.writerows(data)   # write all rows

iow.flush()  # force String to send all from buffer to file (you can't use `iow.close()` for it)
bio.seek(0)  # move to beginning of file

ftp.storbinary('STOR data.csv', bio)

# to see what is in bio
#bio.seek(0)
#print(bio.read()) 

关于python - 如何在Python 3中通过FTP从内存上传数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58628006/

相关文章:

f# - F#中的ftp编程

spring - FTP 出站网关委托(delegate) session 工厂性能

php - 将照片发布到 FB 导致需要上传文件错误

python - 在池多处理中写入文件 (Python 2.7)

java - 嵌入式 Apache FTP 服务器 : Unable to authenticate client using DbUserManager

python - 如何让 nosetests 按顺序运行测试?

html - 上传图像文件时如何禁用捕获(在 ipad 上使用 safari)

Android:完全在后台上传文件

python - 如何从分组条形图 Matplotlib 中删除空格

python - 尝试使用 openpyxl 解冻 Pane 会导致损坏