0

Ich habe eine große Datei in meinem FTP, und ich muss es in Google Cloud-Speicher schreiben. Mein erster Gedanke wäre, es von FTP in lokale Datei herunterladen und dann lokale Datei an Remote-Speicher übertragen. Aber ich würde es lieber tun, ohne es lokal herunterzuladen. Bisher kam ich mit dem folgenden Code auf:Python Stream Daten zwischen Quellen

from ftplib import FTP 
import io 

ftp = ftp = FTP('example.com') 
ftp.voidcmd('TYPE I') 
sock = ftp.transfercmd('RETR file.csv') 
raw = io.BytesIO() 
file = io.BufferedRandom(raw) 

blob = bucket.blob('blobname.csv', chunk_size=262144) # gcs blob 
blob.upload_from_file(file, content_type='text/csv', rewind=True) 

Aber ich bekomme:

Traceback (most recent call last): 
    File "/home/tsh/example.py", line 65, in <module> 
    file = io.BufferedRandom(raw) 
io.UnsupportedOperation: File or stream is not seekable. 

Gibt es eine Möglichkeit, um Rohrdaten von ftp zu Cloud-Speicher (oder eine andere Remote-Ressource) ohne Download es zur lokalen Maschine? Ich benutze Python 3.6.

Antwort

1

Ich denke, Sie können erreichen, was Sie wollen, ohne Python, mit rclone. Wenn Sie müssen verwenden Python, vielleicht bieten sie einen Wrapper oder Sie könnten subprocess Modul verwenden.

+0

Vielen Dank für den Vorschlag rclone, aber ich muss es in reinem Python, ohne Subprozess. – tsh