2016-11-22 113 views
0

我必須將文件從我的遠程計算機傳輸到amazon ec2,然後使用python從那裏傳輸到Amazon S3。我已成功上傳一個文本文件,但不知道如何上傳多個文件。這裏是一個文件的兩個程序的代碼。使用python傳輸文件

獲取文件到EC2

import urllib 
source = urllib.urlopen('url').read() 
fhand = open('file2.txt','w') 
fhand.write(source) 
fhand.close() 

上傳文件到S3

import boto 
from boto.s3.key import Key 
keyId = "acess key" 
skeyId = "secret key" 

fileName="file2.txt" 
bucketName="bname" 
file=open(fileName) 

conn = boto.connect_s3(keyId,skeyId) 
print conn 
bucket = conn.get_bucket(bucketName) 
print bucket 
k = Key(bucket) 
print k 
k.key=fileName 
print k.key 
result = k.set_contents_from_file(file) 
print result 
+0

迭代使用'for'循環相同的代碼。什麼是問題? –

+0

沒有得到確切的迭代想法,我是一個更新鮮的2個月,我開始工作@MoinuddinQuadri – ppp

+0

歡迎來到堆棧溢出!爲了給你一個很好的答案,如果你有一個[問],如果你還沒有看過,它可能會幫助我們。如果你可以提供[mcve],它可能也很有用。 – Mat

回答

0

循環從EC2

import urllib,os 
sources = ['//url1/file1.txt','//url2/file2.txt','//url3/file3.txt'] # List of urls 
for myurl in sources: 
    source = urllib.urlopen(myurl).read() #Open each url file 
    fname = os.path.split(myurl)[1]  #Split the url to get the file name 
    print('Copying file:',fname) 
    fhand = open(fname,'w') 
    fhand.write(source) 
    fhand.close() 

用同樣的原理獲得的文件從一個文件發送mylist = [「a」,「b」,「c」]
https://wiki.python.org/moin/ForLoop

注:
如果相同的文件名是在不同的URL中使用,其結果將被覆蓋,因此你將要添加一個測試或其他一些應對機制,如果這是一個概率。
我用os.path.split()獲取文件名,你可能會發現urlparse功能爲您提供了更好的里程,更復雜的URL

+0

這是給I/O回溯錯誤薩克森的狼@ – ppp

+0

我的錯誤,編輯循環在URL列表,而不是文件名 –