2016-12-15 8 views
2

ディスクに書き込まずに、FTPサーバーからs3のバケットにフォルダの内容を転送しようとしています。現在、s3はフォルダ内のすべてのファイル名を取得していますが、実際のデータは取得していません。フォルダ内の各ファイルはわずか数バイトです。なぜファイル全体をアップロードしていないのか分かりません。トラブル:Pythonを使用してストリーム経由でFTPサーバーからS3にデータを転送する

from ftplib import FTP 
import io 
import boto3 


s3= boto3.resource('s3') 

ftp = FTP('ftp.ncbi.nlm.nih.gov') 
ftp.login() 
ftp.cwd('pubchem/RDF/descriptor/compound') 

address = 'ftp.ncbi.nlm.nih.gov/pubchem/RDF/descriptor/compound/' 

filelist = ftp.nlst() 

for x in range(0, len(filelist)-1): 
    myfile = io.BytesIO() 
    filename = 'RETR ' + filelist[x] 
    resp = ftp.retrbinary(filename, myfile.write) 
    myfile.seek(0) 
    path = address + filelist[x] 
    #putting file on s3 
    s3.Object(s3bucketname, path).put(Body = resp) 


ftp.quit() 

ファイル全体が確実にアップロードされるようにする方法はありますか?

答えて

0

実際にファイルが保存された場所から読み込むように.put()を変更したときに、同じ問題が発生していました。respを直接処理していない場所で、

s3.Object(s3Bucketname, filename).put(Body=open(filename, 'rb')) 
関連する問題