最近工作涉及从OSS将数据归档存储到OAS中,阿里给出的DEMO以及教程略为单薄,网上也没有看到比较好的资料,本着服务大众的精神把这几天自己遇到的一些问题和解决方法分享给大家。
一. Python SDK 导入
安装了Python 2.7.9的版本后(推荐)在命令行输入:
pip install oss2
pip install oassdk
即可使用由阿里云提供的SDK里面的各种方法和属性了。
二. 如何实现大量数据的归档存储
很多人也许都会遇到类似的问题,我们要使用阿里云来管理我们的数据当然是数量很大的,但是阿里云教程里只有单个数据名字写死的简单操作的DEMO演示,甚至于所提供的命令行操作工具更是无法解决问题,所以还是得回归到SDK上来才能进行高级操作。
我的思路很简单,想办法获取OSS里Object的属性列表,然后循环变量(记得导入迭代工具:from itertools import islice)进行阿里云提供的单例归档模式,核心代码如下:
for obj in oss2.ObjectIterator(self.bucket, prefix=’对象名字前缀’):
print(obj.key)
job = self.vault.pull_from_oss(conf.osshost, conf.bucket, obj.key)
print job
三.获取archive_id
这个可以说是最麻烦的事情,教程提供获取方法是从本地上传到OAS会返回一个archive_id,但是对于归档存储来说这种方式就不合适了。
思路是从OAS下载archive列表到本地一个文本文件中再将其中的archive_id后面的序列号取出来放到变量中。在进行这项操作时我采取的方法是使用json模块,我们选择demjson。在命令行输入:
pip install demjson
由于阿里云提供的下载方法会是默认覆盖写入文件中,为了获取完整的信息我每次循环都将写入文件的内容拷贝到另一个文件中,这样就能方便的实现信息汇总而不会丢失。
核心代码如下:
f = open('获取已经下载好archive_id列表的文件路径')
line = f.readline()
xx = ''
while line:
xx= xx+line
line = f.readline()
f.close()
text = demjson.decode(xx)
try:
for i in range(0,10000):
a=text['ArchiveList'][i]['ArchiveId']
print a;
job = vault.retrieve_archive(a)
print job
job.download_to_file('下载archive文件信息的路径')
with open('下载archive文件信息的路径',"r") as f:
content=f.readlines()
with open('拷贝文件信息的路径',"a+") as f1:
f1. writelines(content)
except IndexError,e:
print "id has already got"
``
四.其他说明
阿里云教程传送门:
https://help.aliyun.com/document_detail/27379.html?spm=5176.product27366.6.112.F5WnNe