python下載阿里雲oss裡全部檔案
阿新 • • 發佈:2019-02-06
- 背景:因為要換一個阿里雲賬號,所以這些檔案得下下載下來,轉移到那個賬號的oss裡面去。
- 先替換掉accesskey_id資訊等等
endpoint = "http://oss-cn-beijing.aliyuncs.com";
accesskey_id = "xx";
accesskey_secret = "xx";
bucket_name = "rw-xxx-xxx";
建議直接使用 pip install oss2 安裝
- 程式碼 oss_file.py :
# -*- coding: utf-8 -*- ''' oss 操作 ''' import oss2 import os endpoint = "http://oss-cn-beijing.aliyuncs.com"; accesskey_id = "xx"; accesskey_secret = "xx"; bucket_name = "rw-xxx-xxx"; #本地檔案儲存路徑字首 download_local_save_prefix = "C:/Users/Administrator/Desktop/download/"; ''' 列舉prefix全部檔案 ''' def prefix_all_list(bucket,prefix): print("開始列舉"+prefix+"全部檔案"); oss_file_size = 0; for obj in oss2.ObjectIterator(bucket, prefix ='%s/'%prefix): #print(' key : ' + obj.key) oss_file_size = oss_file_size + 1; download_to_local(bucket, obj.key, obj.key); print(prefix +" file size " + str(oss_file_size)); ''' 列舉全部的根目錄資料夾、檔案 ''' def root_directory_list(bucket): # 設定Delimiter引數為正斜線(/)。 for obj in oss2.ObjectIterator(bucket, delimiter='/'): # 通過is_prefix方法判斷obj是否為資料夾。 if obj.is_prefix(): # 資料夾 print('directory: ' + obj.key); prefix_all_list(bucket,str(obj.key).strip("/")); #去除/ else: # 檔案 print('file: ' + obj.key); #下載根目錄的單個檔案 download_to_local(bucket, str(obj.key) , str(obj.key)); ''' 下載檔案到本地 ''' def download_to_local(bucket,object_name,local_file): url = download_local_save_prefix + local_file; #檔名稱 file_name = url[url.rindex("/")+1:] file_path_prefix = url.replace(file_name, "") if False == os.path.exists(file_path_prefix): os.makedirs(file_path_prefix); print("directory don't not makedirs "+ file_path_prefix); # 下載OSS檔案到本地檔案。如果指定的本地檔案存在會覆蓋,不存在則新建。 bucket.get_object_to_file(object_name, download_local_save_prefix+local_file); if __name__ == '__main__': print("start \n"); # 阿里雲主賬號AccessKey擁有所有API的訪問許可權,風險很高。強烈建議您建立並使用RAM賬號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM賬號。 auth = oss2.Auth(accesskey_id,accesskey_secret) # Endpoint以杭州為例,其它Region請按實際情況填寫。 bucket = oss2.Bucket(auth,endpoint , bucket_name); #單個資料夾下載 #prefix_all_list(bucket, "newDown"); root_directory_list(bucket); print("end \n");
- 呼叫root_directory_list方法能列舉出根目錄的所有資料夾和檔案,如果是檔案直接下載,如果是資料夾再呼叫prefix_all_list方法列舉這個資料夾所有檔案。