博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AWS s3 python sdk code examples
阅读量:6191 次
发布时间:2019-06-21

本文共 5328 字,大约阅读时间需要 17 分钟。

Yet another easy-to-understand, easy-to-use aws s3 python sdk code examples.

github地址:.

"""Yet another s3 python sdk example.based on boto 2.27.0"""import timeimport osimport urllibimport boto.s3.connectionimport boto.s3.keydef test():    print '--- running AWS s3 examples ---'    c = boto.s3.connection.S3Connection('
', '
') print 'original bucket number:', len(c.get_all_buckets()) bucket_name = 'yet.another.s3.example.code' print 'creating a bucket:', bucket_name try: bucket = c.create_bucket(bucket_name) except boto.exception.S3CreateError as e: print ' ' * 4, 'error occured:' print ' ' * 8, 'http status code:', e.status print ' ' * 8, 'reason:', e.reason print ' ' * 8, 'body:', e.body return test_bucket_name = 'no.existence.yet.another.s3.example.code' print 'if you just want to know whether the bucket(\'%s\') exists or not' % (test_bucket_name,), \ 'and don\'t want to get this bucket' try: test_bucket = c.head_bucket(test_bucket_name) except boto.exception.S3ResponseError as e: if e.status == 403 and e.reason == 'Forbidden': print ' ' * 4, 'the bucket(\'%s\') exists but you don\'t have the permission.' % (test_bucket_name,) elif e.status == 404 and e.reason == 'Not Found': print ' ' * 4, 'the bucket(\'%s\') doesn\'t exist.' % (test_bucket_name,) print 'or use lookup() instead of head_bucket() to do the same thing.', \ 'it will return None if the bucket does not exist instead of throwing an exception.' test_bucket = c.lookup(test_bucket_name) if test_bucket is None: print ' ' * 4, 'the bucket(\'%s\') doesn\'t exist.' % (test_bucket_name,) print 'now you can get the bucket(\'%s\')' % (bucket_name,) bucket = c.get_bucket(bucket_name) print 'add some objects to bucket ', bucket_name keys = ['sample.txt', 'notes/2006/January/sample.txt', 'notes/2006/February/sample2.txt',\ 'notes/2006/February/sample3.txt', 'notes/2006/February/sample4.txt', 'notes/2006/sample5.txt'] print ' ' * 4, 'these key names are:' for name in keys: print ' ' * 8, name filename = './_test_dir/sample.txt' print ' ' * 4, 'you can contents of object(\'%s\') from filename(\'%s\')' % (keys[0], filename,) key = boto.s3.key.Key(bucket, keys[0]) bytes_written = key.set_contents_from_filename(filename) assert bytes_written == os.path.getsize(filename), ' error occured:broken file' print ' ' * 4, 'or set contents of object(\'%s\') by opened file object' % (keys[1],) fp = open(filename, 'r') key = boto.s3.key.Key(bucket, keys[1]) bytes_written = key.set_contents_from_file(fp) assert bytes_written == os.path.getsize(filename), ' error occured:broken file' print ' ' * 4, 'you can also set contents the remaining key objects from string' for name in keys[2:]: print ' ' * 8, 'key:', name key = boto.s3.key.Key(bucket, name) s = 'This is the content of %s ' % (name,) key.set_contents_from_string(s) print ' ' * 8, '..contents:', key.get_contents_as_string() # use get_contents_to_filename() to save contents to a specific file in the filesystem. #print 'You have %d objects in bucket %s' % () print 'list all objects added into \'%s\' bucket' % (bucket_name,) objs = bucket.list() for key in objs: print ' ' * 4, key.name p = 'notes/2006/' print 'list objects start with \'%s\'' % (p,) objs = bucket.list(prefix = p) for key in objs: print ' ' * 4, key.name print 'list objects or key prefixs like \'%s/*\', something like what\'s in the top of \'%s\' folder ?' % (p, p,) objs = bucket.list(prefix = p, delimiter = '/') for key in objs: print ' ' * 4, key.name keys_per_page = 4 print 'manually handle the results paging from s3,', ' number of keys per page:', keys_per_page print ' ' * 4, 'get page 1' objs = bucket.get_all_keys(max_keys = keys_per_page) for key in objs: print ' ' * 8, key.name print ' ' * 4, 'get page 2' last_key_name = objs[-1].name #last key of last page is the marker to retrive next page. objs = bucket.get_all_keys(max_keys = keys_per_page, marker = last_key_name) for key in objs: print ' ' * 8, key.name """ get_all_keys() a lower-level method for listing contents of a bucket. This closely models the actual S3 API and requires you to manually handle the paging of results. For a higher-level method that handles the details of paging for you, you can use the list() method. """ print 'you must delete all objects in the bucket \'%s\' before delete this bucket' % (bucket_name, ) print ' ' * 4, 'you can delete objects one by one' bucket.delete_key(keys[0]) print ' ' * 4, 'or you can delete multiple objects using a single HTTP request with delete_keys().' bucket.delete_keys(keys[1:]) print 'now you can delete the bucket \'%s\'' % (bucket_name,) c.delete_bucket(bucket) #references: # [1] http://docs.pythonboto.org/ # [2] amazon s3 api referencesif __name__ == '__main__': test()

转载本文请注明作者和出处[Gary的影响力]http://garyelephant.me,请勿用于不论什么商业用途!

Author: Gary Gao( garygaowork[at]gmail.com) 关注互联网、分布式、高性能、NoSQL、自己主动化、软件团队

支持我的工作:  
你可能感兴趣的文章
淘宝首页性能优化实践
查看>>
Linux添加新硬盘自动挂载硬盘
查看>>
WinDbg使用介绍
查看>>
把表单转成json,并且name为key,value为值
查看>>
【图片识别】Java中使用tess4J进行图片文字识别(支持中文)(转)
查看>>
Android埋点技术分析
查看>>
蓝牙发现服务UUID(service UUID)
查看>>
phalcon遇到的那些坑
查看>>
关于内容审核,你需要了解的东西,这里都有!
查看>>
文本相似性计算总结(余弦定理,simhash)及代码
查看>>
使用geo_ip获得当前访问用户所在的城市
查看>>
Qt 4.7: Getting Started Programming with Qt
查看>>
bing translator api
查看>>
合并GridView中某列相同信息的行(单元格)
查看>>
C#类和接口、虚方法和抽象方法及值类型和引用类型的区别
查看>>
WCF传较大数据(转)
查看>>
Mono 3.0 发布,跨平台 .NET 运行环境
查看>>
C#操作注册服务卸载服务启动服务停止服务.. .
查看>>
Linux系统调用和库函数调用
查看>>
读《企业应用架构模式》-锁
查看>>