Существует несколько ответов на переполнение стека по извлечению файла FTP и запись его в поток, такой как строковый буфер или файл, который затем можно повторить.Python FTP «chunk» iterator (без загрузки всего файла в память)
Такие, как: Read a file in buffer from FTP python
Однако эти решения предполагают загрузку всего файла в память или загрузить его на диск перед началом обработки содержимого.
У меня недостаточно памяти для хранения всего файла, и у меня нет доступа к диску. Это можно сделать, обработав данные в функции обратного вызова, но Я хочу знать, можно ли обернуть ftp-код в какой-то магии, которая возвращает итератор, а не перегружает мой код обратными вызовами.
I.E. а не:
def get_ftp_data(handle_chunk):
...
ftp.login('uesr', 'password') # authentication required
ftp.retrbinary('RETR etc', handle_chunk)
...
get_ftp_data(do_stuff_to_chunk)
Я хочу:
for chunk in get_ftp_data():
do_stuff_to_chunk(chunk)
И (в отличие от существующих ответов) Я хочу сделать это без написания весь передачи файлов файл на диске или в памяти, прежде чем итерация на нем.
Существует аналогичный вопрос (http://stackoverflow.com/questions/9968592/turn-functions-with-a-callback-into- [Turn функции с обратным вызовом в генераторах Python?] python-generatorators) –