基于七牛Python SDK写的一个批量下载脚本
前言
上一篇基于七牛Python SDK写的一个同步脚本所写的脚本只支持上传,不支持文件下载。
虽然这个需求不太强烈,但有可能有人(在备份、迁移时)需要,而官方有没提供对应的工具,所以我就把这个功能也加上。
实现
下载脚本的核心逻辑
(博客园的markdown代码区显示不友好,可以到我的个人博客中浏览)
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#
# AUTHOR = "heqingpan"
# AUTHOR_EMAIL = "heqingpan@126.com"
# URL = "http://git.oschina.net/hqp/qiniu_sync"
import qiniu
from qiniu import Auth
from qiniu import BucketManager
import os
import re
import urllib2
import sys
access_key = ''
secret_key = ''
bucket_name = ''
bucket_domain = ''
q = Auth(access_key, secret_key)
bucket = BucketManager(q)
basedir=os.path.realpath(os.path.dirname(__file__))
#同步目录
#basedir=""
filename=__file__
ignore_paths=[filename,"{0}c".format(filename)]
ignore_names=[".DS_Store",".git",".gitignore"]
charset="utf8"
diff_time=2*60
def list_all(bucket_name, bucket=None, prefix="", limit=100):
rlist=[]
if bucket is None:
bucket = BucketManager(q)
marker = None
eof = False
while eof is False:
ret, eof, info = bucket.list(bucket_name, prefix=prefix, marker=marker, limit=limit)
marker = ret.get('marker', None)
for item in ret['items']:
rlist.append(item["key"])
if eof is not True:
# 错误处理
#print "error"
pass
return rlist
def down_file(key,basedir="",is_private=1,expires=3600):
if isinstance(key,unicode):
key=key.encode(charset)
url = 'http://%s/%s' % (bucket_domain, key)
if is_private:
url=q.private_download_url(url, expires=expires)
c=urllib2.urlopen(url)
fpath=key.replace("/",os.sep)
savepath=os.path.join(basedir,fpath)
dir_=os.path.dirname(savepath)
if not os.path.isdir(dir_):
os.makedirs(dir_)
elif os.path.isfile(savepath):
os.remove(savepath)
f = file(savepath, 'wb')
f.write(c.read())
f.close()
def down_all(prefix=""):
import traceback
for key in list_all(bucket_name,bucket,prefix=prefix):
try:
down_file(key,basedir=basedir)
print "down:\t"+key
except:
print "error down:\t"+key
print traceback.format_exc()
print "down end"
def main():
if len(sys.argv)>1:
if sys.argv[1]=="down":
prefix=len(sys.argv)>2 and sys.argv[2] or ""
down_all(prefix=prefix)
return
if __name__=="__main__":
main()
使用方式
安装七牛Python SDK
pip install qiniu
填写脚本文件(qiniusync.py)的配置信息
access_key = ''
secret_key = ''
bucket_name = ''
bucket_domain = ''
注册后可以拿到对应的信息
将脚本文件(qiniusync.py)拷贝到待同步根目录
运行脚本
python qiniusync.py down
python qiniusync.py down [文件路径前缀]
后记
我已经将下载的脚本与同步脚本整合在一起,放到GitOSC和github上。
至此该脚本支持批量下载、同步上传。
博客园的markdown代码区显示不友好,可以到我的个人博客中浏览
基于七牛Python SDK写的一个批量下载脚本的更多相关文章
- 基于七牛Python SDK写的一个同步脚本
需求背景 最近刚搭了个markdown静态博客,想把博客的图片放到云存储中. 经过调研觉得七牛可以满足我个人的需求,就选它了. 博客要引用图片就要先将图片上传到云上. 虽然七牛网站后台可以上传文件,但 ...
- python+imageMagick写的一个压缩图片脚本
!/usr/bin/python import os import cPickle as p import re import Image def imageCompre(imagedir = '.' ...
- Async Cow Python 七牛异步SDK
# Async Cow Python 七牛异步SDK > gitee链接 >github链接本SDK基于官方SDK改造而成,但又对其进行了进一步封装,简化了相关操作例如:- 1.不需要使用 ...
- Python 写了一个批量生成文件夹和批量重命名的工具
Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...
- 用Python 3写的一个Spider小爬虫(使用内置urllib模块and正则表达式)
用Python写了一个Spider小爬虫,爬一爬斗鱼“王者荣耀”在线直播的主播及人气
- 七牛 python
Python SDK使用指南 上传策略 变量 对象存储 API 参考手册 多媒体数据处理 API 参考手册
- 七牛整合php上传从微信下载接口下载下来的文件
因为ios系统直接读取不了MP3格式的文件,所以从微信接口下载下来的MP3格式音频上传到七牛后要转码. Sample code: public function doMobileUploadT ...
- 自己写的一个tomcat发布脚本
闲来无事,就自己写一个shell脚本,方便自己以后在服务器上部署tomcat下的项目.我本地用maven打包,然后每次都要人工去切换一堆堆目录,有点繁琐,所以我写了下面的shell脚本. #! /bi ...
- 把登录和退出功能单独写到一个公共.py脚本,其它用例test1,test2调用公共登录,退出函数
公共登录/退出函数模块(login_exit.py): #coding:utf-8import timedef login(driver, username, password):#此处的driver ...
随机推荐
- iOS RUN LOOP 是个什么东西?
RUN Loop是什么? 1.runloop是事件接收和分发机制的一个实现. 2.什么时候使用runloop 当需要和该线程进行交互的时候.主线程默认有runloop.当自己启动一个线程,如果只是 ...
- 有关linux中,<math.h>的调用方法
h{font-weight:bold;color:green;font-size:105%} p{font-size:100%} linux下C语言程序中,若要用到math.h中的函数(如:sin() ...
- 每天一个linux命令(权限):【转载】chgrp命令
在lunix系统里,文件或目录的权限的掌控以拥有者及所诉群组来管理.可以使用chgrp指令取变更文件与目录所属群组,这种方式采用群组名称或群组识别码都可以.Chgrp命令就是change group的 ...
- 二次剩余-Cipolla
二次剩余 \(Cipolla\) 算法 概述 大概就是在模 \(p\) 意义下开根号,如求解方程\(x^2\equiv n(mod\ p)\). 这里只考虑 \(p\) 为素数的情况.若 \(p=2\ ...
- MSDN中回调函数的讲解及其C#例子:用委托实现回调函数
转自:http://blog.csdn.net/sizheng0320/article/details/1615777 ms-help://MS.MSDNQTR.2003FEB.2052/cpguid ...
- 第06篇 MEF部件的生命周期(PartCreationPolicy)
一.演示概述 本演示介绍了MEF的生命周期管理,重点介绍了导出部件的三种创建策略,分别是:CreationPolicy.Any.CreationPolicy.Shared.CreationPolicy ...
- 1.JMeter===添加响应断言
断言即Lr中的检查点,我们在进行测试时,需要对每次请求测试的返回做检验 1.以百度做案例,添加线程组==添加HTTP请求==添加查看结果树 2.在HTTP请求下添加响应断言 注:模式匹配规则,比较常用 ...
- 数组去重(初识ES6)
较常见的一问题:数组去重. 方法一:利用hash数组的原理 var arr=[1,3,3,4,5,5,6,6,7,8,69,8,99,9,0,]; function unique(arry){ var ...
- GOF23设计模式之适配器模式(Adapter)
一.适配器模式概述 将一个类的接口转换成客户可用的另外一个接口. 将原本不兼容不能在一起工作的类添加适配处理类,使其可以在一起工作. 二.适配器模式场景 要想只有USB接口的电脑想使用PS/2接口的键 ...
- A Complete Web Video Solution
A Complete Web Video Solution FLASH . HTML5 . JAVASCRIPT API Support Embed videos from youtube, Vime ...