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界面,還有這些功能:

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

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

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

這個軟件做起來很靈活,實現起來應該也不難,這里不展開說了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM