python 遍历oss 实现批量下载

    oss存储有很多批量上传的文  = = 然后现在是由于程序主动删除了oss的文件,阿里是不给恢复的,所以想要把文件备份到本地 。
    阿里的oss是key-values形式的存储,没有文件夹的概念,也是就是说test/007.jpg实际上是两个文件 一个叫做test/的空文件和一个叫做test/007.jpg 的文件
    看了ossfs osscmd 都可以实现批量下载,然后ossfs挂载上去对其操作都是在oss端的操作,后者 还没用。
  故此,自己写了个很烂的代码。先暂时满足下需求。囧 ,不行的话还是采用osscmd多线程支持断电续传吧 囧。没办法 渣呀。。。。。。。
直接贴了 。。。还有 模块记得安装 pip install oss2
#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import  requests
import re

auth = oss2.Auth(' 您的AccessKeyId ', ' 您的AccessKeySecret ')
bucket = oss2.Bucket(auth, '地区', 'bucket桶名')

def mkdir(path):
    path = path.strip()
    path = path.rstrip("\\")
    isExits = os.path.exists(path)
    if not isExits:
        print(path + "创建成功")
        os.makedirs(path)
        return True
    else:
        print(path+"目录存在")
        return False

def percentage(consumed_bytes, total_bytes):
    if total_bytes:
        rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
        print('\r{0}% '.format(rate), end='')
        sys.stdout.flush()

for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
    c = b.key
    if c[-1:] == '/':
        mkdir(c)
    if c[-1:] != '/':
        oss2.resumable_download(bucket, c, c,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
        print(c+"下载完成")

然后 期间创建目录看的是别人的文档,初学python 只能按别人的代码来 TOT。总感觉这样做太低效了,有其他好点的办法么 ,这样拼拼凑凑的代码 不忍直视 囧o(╯□╰)o 。 Python2.6 Python3.4都可以跑。
来自http://www.qttc.net/201209207.html

升级版 : 增量下载 o(╯□╰)o

#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import  requests
import re
import time
auth = oss2.Auth('同上', '同上')
bucket = oss2.Bucket(auth, '同上', '同上')

def mkdir(path):
    path = path.strip()
    path = path.rstrip("\\")
    isExits = os.path.exists(path)
    if not isExits:
        print(path + "创建成功")
        os.makedirs(path)
        return True
    else:
        print(path+"目录已经存在")
        return False

def percentage(consumed_bytes, total_bytes):
    if total_bytes:
        rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
        print('\r{0}% '.format(rate), end='')
        sys.stdout.flush()

filename = time.strftime("%Y-%m-%d-%H%M%S", time.localtime())
for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
   c = b.key
   if c[-1:] == '/':
        mkdir(c)
   if c[-1:] != '/':
       remote_stream = bucket.get_object(c)
       print(remote_stream.last_modified)
       ticks = time.time()
#       file = open('time.txt','w')
#       file.write(str(ticks))
       file = open('time.txt','r')
       f = file.read()
       k = float(f)
       if remote_stream.last_modified > k:
           oss2.resumable_download(bucket, c, c,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
           
           #filename = time.strftime("%Y-%m-%d-%H%M%S", time.localtime())
           print(filename)
           fileobject = open(filename,'a')
           fileobject.write(str(c))
           #fileobject.close()
           #bucket.get_object_to_file(c,c)

file = open('time.txt','w')
file.write(str(ticks))
file.close()
fileobject.close()

缺点:遍历 嗯 然后目录没有做提取 。然后下载地点就是本地 。之后再改改。哈哈

断点下载= = 
#coding:utf-8
from __future__ import print_function
import os,sys
import oss2
from itertools import islice
import urllib
import  requests
import re
auth = oss2.Auth('XXX', ' XXX')
bucket = oss2.Bucket(auth, ' XXX', ' XXX')
def mkdir(path):
    path = path.strip()
    path = path.rstrip("\\")
    isExits = os.path.exists(path)
    if not isExits:
        print(path + "创建成功")
        os.makedirs(path)
        return True
    else:
        print(path+"目录已经存在")
        return False

def percentage(consumed_bytes, total_bytes):
    if total_bytes:
        rate = int(100 * (float(consumed_bytes) / float(total_bytes)))
        print('\r{0}% '.format(rate), end='')
        sys.stdout.flush()
for b in islice(oss2.ObjectIterator(bucket),sys.maxsize):
    c = b.key
    if c[-1:] == '/':
        mkdir('/ossbackup/ossback/'+c)
    else:
        cname = str(c)
        sumnumber = 0
        i = 0
        for line2 in open('downname.txt','r'):
            line1 = str(line2)
            cname2 = str(cname+'\n')
            if cname2 != line1:
                i = i + 0
                sumnumber = i
            else:
                i = i + 1
                sumnumber = i
       # print(sumnumber)
        if sumnumber == 0 :
            downfilename = open('downfilename.txt','w')
            downfilename.write(str(cname))
            print(cname+'is not download')
            downfilename.close()
        else :
            print(cname+' is download')
        downfilename = open('downfilename.txt','r')
        lineend = downfilename.readline()
        oss2.resumable_download(bucket,lineend,'/ossbackup/ossback/'+lineend,store=oss2.ResumableDownloadStore(root='/tmp'),multiget_threshold=20*1024*1024,part_size=10*1024*1024,num_threads=3,progress_callback=percentage)
        print(lineend+"下载完成"+"\n")
        file = open('downname.txt','a')
        file.write(str(lineend)+"\n")






来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30629069/viewspace-2129464/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30629069/viewspace-2129464/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值