Как загрузить данные из памяти через ftp в python 3? - PullRequest
0 голосов
/ 30 октября 2019

Я хочу загрузить различные данные из памяти (содержимое массивов, статический html-код, ...) на веб-сервер через ftp.

Это работает только для одной базовой строки «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>

1 Ответ

0 голосов
/ 30 октября 2019

Вы можете загружать файлы, но не переменные.

Вы можете использовать BytesIO или StringIO, чтобы создать файл с вашими данными и загрузить его. T

у них есть функции, такие как обычный файл - т.е. 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()) 
...