zoukankan      html  css  js  c++  java
  • Windows下载阿里云对象存储OSS文件(Python)

    >> [目录] 数据远程采集 Step by Step

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

    WIN10,Python 3.7.4,PyCharm

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

     

    手动下载


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

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

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

    image

     

    脚本下载(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>')

    根据上述代码,编写数据下载脚本如下(保存为 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的访问权限,一定要好好保管。

    image

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

    数据管理软件


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

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

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

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

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

  • 相关阅读:
    【CodeForces】[612C]Replace To Make Regular Bracket Sequence
    【POJ】[1363]Rails
    【POJ】[1363]Rails
    【杭电】[1022]Train Problem I
    【杭电】[1022]Train Problem I
    【杭电】[1873]看病要排队
    【杭电】[1873]看病要排队
    【HPU】[1714]感恩节KK专场——送给新生的礼物
    【HPU】[1714]感恩节KK专场——送给新生的礼物
    [leetcode]392. Is Subsequence 验证子序列
  • 原文地址:https://www.cnblogs.com/hotwater99/p/12698640.html
Copyright © 2011-2022 走看看