Es gibt mehrere Antworten auf Stapelüberlauf über eine FTP-Datei abgerufen und in einen Strom, wie beispielsweise einen String-Puffer oder eine Datei zu schreiben, die dann auf iteriert werden kann.Python FTP „chunk“ Iterator (ohne die gesamte Datei in den Speicher geladen)
wie: Read a file in buffer from FTP python
jedoch beinhalten diese Lösungen die gesamte Datei in den Speicher geladen oder auf der Festplatte vor Beginn Herunterladen der Inhalte zu verarbeiten.
Ich habe nicht genug Speicher, um die gesamte Datei zu puffern und ich keinen Zugriff auf die Platte haben. Dies kann durch die Verarbeitung der Daten in der Callback-Funktion durchgeführt werden, aber Ich möchte wissen, ob es möglich ist, den FTP-Code in eine Magie zu wickeln, die einen Iterator zurückgibt, anstatt meinen Code mit Callbacks zu würzen.
I.E. statt:
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)
Ich mag:
for chunk in get_ftp_data():
do_stuff_to_chunk(chunk)
und (im Gegensatz zu bestehenden Antworten) Ich möchte es tun, ohne vorher Iterieren auf die gesamte FTP-Datei auf der Festplatte oder Speicher zu schreiben.
Es gibt ähnliche Frage (http://stackoverflow.com/questions/9968592/turn-functions-with-a-callback-into- [Drehen Funktionen mit einem Rückruf in Python-Generatoren?] Python-Generatoren) –