PC端数据下载软件开发(Python)

存储工具:阿里云->对象存储

需要将数据从云端下载到本地后再进行后续分析处理。


手动下载


需要下载的文件不多时,可以用这个方式。

依次点击:阿里云->控制台->对象存储->Bucket列表->XX Bucket->文件管理

该界面下,选中数据文件后,点击 批量操作->下载

PC端数据下载软件开发(Python)

脚本下载(Python)


按照阿里云的SDK文档(有各种语言的版本,这里选的是Python),可以很快地编写下载脚本:

https://help.aliyun.com/document_detail/32027.html?spm=a2c4g.11186623.2.24.5c741c62a5XKqp#concept-32027-zh

用到下载文件、列举文件、删除文件这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>‘)

根据上述代码,编写的数据文件下载脚本如下:

import oss2
import os
from itertools import islice

local_dir = ‘E://data//‘
access_key = ‘<yourAccessKeyId>‘
secret_key = ‘<yourAccessKeySecret>‘

try:
  # 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。
  # 强烈建议您创建并使用RAM账号进行API访问或日常运维,
  # 请登录 https://ram.console.aliyun.com 创建RAM账号。
  auth = oss2.Auth(access_key, secret_key)
  # Endpoint以北京为例,其它Region请按实际情况填写。
  bucket = oss2.Bucket(auth, ‘oss-cn-beijing.aliyuncs.com‘, ‘<yourBucketName>‘)

  for obj in oss2.ObjectIterator(bucket):
    print(obj.key)
    filepath = local_dir + obj.key
    if os.path.exists(filepath):
      print (‘已存在:‘ + filepath)
      # delete data
      print(‘删除云端数据:‘ + obj.key)
      bucket.delete_object(obj.key)
    else:
      filedir = os.path.dirname(filepath)
      if not os.path.exists(filedir):
        os.makedirs(filedir)
        print(‘目录创建成功:‘ + filedir)
      bucket.get_object_to_file(obj.key, filepath)
except:
  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的访问权限,一定要好好保管。

PC端数据下载软件开发(Python)

<yourBucketName> 是之前创建的Bucket名称。

数据管理软件


在上述脚本的基础上,可以做一个数据管理软件,加入UI界面,还有这些功能:

同步:读取云端的所有文件名,更新到本地;

下载:下载全部文件、部分文件;

删除:删除全部文件、部分文件

这个软件做起来很灵活,实现起来应该也不难,这里不展开说了。