Загрузите файл в памяти (сгенерированный вызовами API) на FTP частями в Python.Python

Программы на Python
Ответить
Anonymous
 Загрузите файл в памяти (сгенерированный вызовами API) на FTP частями в Python.

Сообщение Anonymous »

Мне нужно иметь возможность загружать файл через FTP и SFTP в Python, но с некоторыми необычными ограничениями.
  • Файл НЕ ДОЛЖЕН быть записан на диск.
  • Файл создается путем вызова API и записи ответа в формате JSON в файл.
  • К API выполняется несколько вызовов. Невозможно получить весь результат за один вызов API.
  • Я не могу сохранить в строковой переменной полный результат выполняя несколько необходимых вызовов и добавляя их в каждый вызов, пока весь файл не окажется в памяти. Файл может быть огромным, и существует ограничение на ресурсы памяти. Каждый фрагмент должен быть отправлен, а память освобождена.
Итак, вот пример кода того, что я хотел бы:

Код: Выделить всё

def chunks_generator():
range_list = range(0, 4000, 100)
for i in range_list:
data_chunk = requests.get(url=someurl, url_parameters={'offset':i, 'limit':100})
yield str(data_chunk)

def upload_file():
chunks_generator = chunks_generator()
for chunk in chunks_generator:
data_chunk= chunk
chunk_io = io.BytesIO(data_chunk)
ftp = FTP(self.host)
ftp.login(user=self.username, passwd=self.password)
ftp.cwd(self.remote_path)
ftp.storbinary("STOR " + "myfilename.json", chunk_io)
Мне нужен только один файл со всеми добавленными частями.
Что у меня уже есть и работает, так это если я держу весь файл в памяти и отправляю его сразу следующим образом:< /p>

Код: Выделить всё

string_io = io.BytesIO(all_chunks_together_in_one_string)
ftp = FTP(self.host)
ftp.login(user=self.username, passwd=self.password)
ftp.cwd(self.remote_path)
ftp.storbinary("STOR " + "myfilename.json", string_io )
Мне это нужно в ftplib, но оно понадобится и в Paramiko для SFTP. Если есть какие-либо другие библиотеки, которые будут работать лучше, я открыт.

Подробнее здесь: https://stackoverflow.com/questions/516 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»