2016-11-22 89 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列表,而不是文件名 –