2016-06-29 9 views
1

Wie kann ich öffnen und FTP-URL und laden Sie es in eine Datei. Was ich versuche sieht ungefähr so ​​aus:Python FTP-URL öffnen und in Datei schreiben

from contextlib import closing 
from urllib.request import urlopen 

url = 'ftp://whatever.com/file.txt' 
target_path = 'file.txt' 

with closing(urlopen(url)) as source: 
    with open(target_path, 'wb') as target: 
     target.write(source) 

Dies ist jedoch nicht mit dem folgenden Fehler:

TypeError: 'addinfourl' does not support the buffer interface 

Gibt es eine einfache Möglichkeit, diese Arbeit zu machen? Vor allem, wenn ich es erweitern möchte, so dass die Datei extrahiert wird, während es heruntergeladen wird?

+0

Was ist 'Schließen'? Vermutlich soll es mit dem Inhalt der FTP-URL gleichgesetzt werden? – holdenweb

+0

Entschuldigung, ich habe ein Code-Snippet geschrieben. Ich habe Importanweisungen hinzugefügt. –

Antwort

0

Die write erfordert Objekt mit Pufferschnittstelle, insbesondere bytes, aber das ist eigentlich sourceBufferedReader (oder HTTPResonse wenn HTTP). Um Bytes zu erhalten, müssen Sie anrufen BufferedReader.read()

from contextlib import closing 
from urllib.request import urlopen 

url = 'ftp://whatever.com/file.txt' 
target_path = 'file.txt' 

with closing(urlopen(url)) as source: 
    with open(target_path, 'wb') as target: 
     target.write(source.read()) 
+0

Das funktioniert, aber soweit ich es verstehe, lädt es die gesamte Datei in den Speicher und schreibt sie dann auf die Festplatte, richtig? Das ist bei großen Dateien problematisch. –

+0

'read()' akzeptiert 'size', die Sie mit Schleife verwenden können – kwarunek

+0

Ja, ich kann das verwenden, aber ich frage mich, ob es eine Möglichkeit gibt, dies zu tun, ohne manuelle Schleifen zu schreiben. –