1. 程式人生 > >python下載阿里雲oss裡全部檔案

python下載阿里雲oss裡全部檔案

  • 背景:因為要換一個阿里雲賬號,所以這些檔案得下下載下來,轉移到那個賬號的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方法列舉這個資料夾所有檔案。