天天看點

python實作批量下載下傳及批量删除七牛空間檔案

安裝依賴

pip install qiniu
pip install requests==2.22.0
           

下載下傳指定bucket所有檔案

# -*- coding: utf-8 -*-
from qiniu import Auth
from qiniu import BucketManager
import requests
import os

access_key = 'r8E5bJ38C1236YULTogggg_-q5PZ1234xnCA6666'
secret_key = 'tMkR71234kc5555hfV3del3tPOHtcMrnniKg1234'

q = Auth(access_key, secret_key)
bucket = BucketManager(q)
# 空間名字
bucket_name = 'wxapp'
# 字首
prefix = None
# 列舉條目
limit = 20000
# 列舉出除'/'的所有檔案以及以'/'為分隔的所有字首
delimiter = None
# 标記
marker = None


def download_all(save_path):
    """
    args:
        save_path:要儲存的本地路徑
    return:
        none
    """
    if save_path[-1] == os.sep:
        save_path = save_path[0:-1]

    # 域名
    domain_name = 'http://img.demo1234.com/'
    ret, eof, info = bucket.list(bucket_name, prefix, marker, limit, delimiter)
    for i in ret['items']:
        print(i['key'])
        base_url = domain_name + i['key']
        print(base_url)

        # 如果空間有時間戳防盜鍊或是私有空間,可以調用該方法生成私有連結
        private_url = q.private_download_url(base_url, expires=100)
        # print(private_url)

        r = requests.get(private_url)

        if r.content:
            filename = i['key'].split('/')[-1]
            dirname = os.path.dirname(i['key'])
            print('dir==', dirname)
            local_dir = save_path + os.sep + dirname.replace('/', os.sep) + os.sep
            print('local_dir==', local_dir)
            if not os.path.exists(local_dir):
                os.makedirs(local_dir)
            file = open(local_dir + filename, "wb")
            file.write(r.content)
            file.flush()
            file.close()

           

删除指定bucket所有檔案

def delete_all():
    del_count = 0
    print('DELETE ALL files for <{}>'.format(bucket_name))
    ret, eof, info = bucket.list(bucket_name, prefix, marker, limit, delimiter)
    for i in ret['items']:
        del_count = del_count + 1
        print('{}:{}'.format(del_count, i['key']))
        ret, info = bucket.delete(bucket_name, i['key'])
           

說明:

填寫自己的access_key和secret_key ,bucket_name 對應七牛的bucket

例如,要将bucket名為wxapp的所有圖檔下載下傳到本地F盤下的qiniu_bak :

if __name__ == '__main__':
    download_all('F:\\qiniu_bak')