Windows下载阿里云对象存储OSS文件(Python)
存储工具:阿里云->对象存储
WIN10,Python 3.7.4,PyCharm
需要将数据从云端下载到本地后再进行后续分析处理。
手动下载
需要下载的文件不多时,可以用这个方式。
依次点击:阿里云->控制台->对象存储->Bucket列表->XX Bucket->文件管理
该界面下,选中数据文件后,点击 批量操作->下载
脚本下载(Python)
按照阿里云的SDK文档(有各种语言的版本,这里选的是Python),可以很快地编写下载脚本:
用到下载文件、列举文件、删除文件这3个功能。
下载文件
以下代码用于将指定的OSS文件下载到本地文件:
# -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>') # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>') # <yourObjectName>从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 # <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt。 bucket.get_object_to_file('<yourObjectName>', '<yourLocalFile>')
列举文件
以下代码用于列举指定存储空间下的10个文件:
# -*- coding: utf-8 -*- import oss2 from itertools import islice # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>') # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>') # oss2.ObjectIteratorr用于遍历文件。 for b in islice(oss2.ObjectIterator(bucket), 10): print(b.key)
删除文件
以下代码用于删除指定文件:
# -*- coding: utf-8 -*- import oss2 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。 auth = oss2.Auth('<yourAccessKeyId>', '<yourAccessKeySecret>') # Endpoint以杭州为例,其它Region请按实际情况填写。 bucket = oss2.Bucket(auth, 'http://oss-cn-hangzhou.aliyuncs.com', '<yourBucketName>') # <yourObjectName>表示删除OSS文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 bucket.delete_object('<yourObjectName>')
根据上述代码,编写数据下载脚本如下(保存为 oss_download.py):
1 import oss2 2 import os 3 from itertools import islice 4 5 local_dir = 'E://data//' 6 access_key = '<yourAccessKeyId>' 7 secret_key = '<yourAccessKeySecret>' 8 9 try: 10 # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。 11 # 强烈建议您创建并使用RAM账号进行API访问或日常运维, 12 # 请登录 https://ram.console.aliyun.com 创建RAM账号。 13 auth = oss2.Auth(access_key, secret_key) 14 # Endpoint以北京为例,其它Region请按实际情况填写。 15 bucket = oss2.Bucket(auth, 'oss-cn-beijing.aliyuncs.com', '<yourBucketName>') 16 17 for obj in oss2.ObjectIterator(bucket): 18 print(obj.key) 19 filepath = local_dir + obj.key 20 if os.path.exists(filepath): 21 print ('已存在:' + filepath) 22 # delete data 23 print('删除云端数据:' + obj.key) 24 bucket.delete_object(obj.key) 25 else: 26 filedir = os.path.dirname(filepath) 27 if not os.path.exists(filedir): 28 os.makedirs(filedir) 29 print('目录创建成功:' + filedir) 30 bucket.get_object_to_file(obj.key, filepath) 31 except: 32 print('wrong')
程序中指定了本地的存储目录为’E://data//’,使用’//’来表示目录不容易出错。
列举出指定Bucket中的各个文件名,如果该文件在Bucket的一个二级目录下,文件名中也会包含文件夹信息,用print(obj.key) 打印出来:
FT_M003/FT_M003_00002019_2020-04-02_070821.db3
根据obj.key得到存储到本地的文件名 filepath = local_dir + obj.key
如果本地存在这个文件,就把云端Bucket中文件给删掉,否则就下载到本地(如果本地不存在目录,就创建目录)。当然也可以选择不删或者下载完成后马上就删,这个随意。
下载云端文件到本地(本地文件名:filepath)
bucket.get_object_to_file(obj.key, filepath)
删除云端文件
bucket.delete_object(obj.key)
<yourAccessKeyId>,<yourAccessKeySecret>
可以在AccessKey管理中创建,创建完成后会生成AccessKey和AccessKeySecret,并保存在一个csv文件中,通过这个钥匙可以获得阿里云所有API的访问权限,一定要好好保管。
<yourBucketName> 是之前创建的Bucket名称。
数据管理软件
在上述脚本的基础上,可以做一个数据管理软件,加入UI界面,还有这些功能:
同步:读取云端的所有文件名,更新到本地;
下载:下载全部文件、部分文件;
删除:删除全部文件、部分文件
这个软件做起来很灵活,实现起来应该也不难,这里不展开说了。