前言

上一篇基于七牛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写的一个批量下载脚本的更多相关文章

  1. 基于七牛Python SDK写的一个同步脚本

    需求背景 最近刚搭了个markdown静态博客,想把博客的图片放到云存储中. 经过调研觉得七牛可以满足我个人的需求,就选它了. 博客要引用图片就要先将图片上传到云上. 虽然七牛网站后台可以上传文件,但 ...

  2. python+imageMagick写的一个压缩图片脚本

    !/usr/bin/python import os import cPickle as p import re import Image def imageCompre(imagedir = '.' ...

  3. Async Cow Python 七牛异步SDK

    # Async Cow Python 七牛异步SDK > gitee链接 >github链接本SDK基于官方SDK改造而成,但又对其进行了进一步封装,简化了相关操作例如:- 1.不需要使用 ...

  4. Python 写了一个批量生成文件夹和批量重命名的工具

    Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...

  5. 用Python 3写的一个Spider小爬虫(使用内置urllib模块and正则表达式)

    用Python写了一个Spider小爬虫,爬一爬斗鱼“王者荣耀”在线直播的主播及人气

  6. 七牛 python

    Python SDK使用指南 上传策略 变量 对象存储 API 参考手册 多媒体数据处理 API 参考手册

  7. 七牛整合php上传从微信下载接口下载下来的文件

    因为ios系统直接读取不了MP3格式的文件,所以从微信接口下载下来的MP3格式音频上传到七牛后要转码.   Sample code:   public function doMobileUploadT ...

  8. 自己写的一个tomcat发布脚本

    闲来无事,就自己写一个shell脚本,方便自己以后在服务器上部署tomcat下的项目.我本地用maven打包,然后每次都要人工去切换一堆堆目录,有点繁琐,所以我写了下面的shell脚本. #! /bi ...

  9. 把登录和退出功能单独写到一个公共.py脚本,其它用例test1,test2调用公共登录,退出函数

    公共登录/退出函数模块(login_exit.py): #coding:utf-8import timedef login(driver, username, password):#此处的driver ...

随机推荐

  1. HDU2037 今年暑假不AC

    解题思路:贪心问题,关键突破口是,先将节目的结束时间 从小到大排个序,然后依次判断后面一个节目的开始时间 是否大于或等于前一个符合条件的节目的结束时间.见代码: #include<cstdio& ...

  2. Matlab以MEX方式调用C源代码【转载】

    原文地址:http://blog.sina.com.cn/s/blog_468651400100coas.html 这是自己整理的一个对应的文档:<Matlab以MEX方式调用C源代码> ...

  3. android 和主线程有关的小问题

    1.在android 中 HTTP请求被不允许在主线程中执行,否则会抛出异常.如果请求时间过长,阻塞UI线程是一个非常差的体验之前,刚开始开发遇到这个问题,每次app运行到最后,发送网络请求就自己崩溃 ...

  4. vs中无法找到头文件

    在VS项目上右键属性 C/C++->常规->附加包含目录中把此路径添加上,路径与路径之间用 ; 隔开

  5. Tencent Server Web 安装试用

    Tencent Server Web 安装试用 私有环境搭建,使用docker-compose 进行memcache 安装 参考github 代码 https://github.com/rongfen ...

  6. openresty && hashids&& redis 生成短链接

    1. 原理     a. 从redis 获取需要表示的短链接的id( redis incr)     b. hashids 编码 id     c. openresty  conteent_by_lu ...

  7. win7 QT +opencv环境搭建

    1.Win7 Qt4.8.5+QtCreator2.8.0+mingw环境参考前博文先搭建 2.下载Cmake2.8.11.2版本,安装.运行 [项目]那编译器选择:MinGW4.4.另外,重新编译O ...

  8. Oracle存储过程记录异常日志

    一般我们会将一些涉及到数据库的定时任务直接用存储过程搞定,省去了后端代码的开发.部署,简单.快速,但这种方式存在一个弊端——当存储过程执行出错了,我们无法感知.解决办法也简单,学代码那样去捕获异常.打 ...

  9. git 清除本地无效的分支

    远程服务器的分支已经删掉了,但是本地分支还存在 $ git fetch -p 如果不行,使用下面的指令 $ git remote prune origin

  10. printf()_scanf()_取余运算符与取模运算符

    基本的输入和输出函数的用法 printf();四种用法 1.printf("字符串\n"); 2.printf("输出控制符",输出参数); 3.printf( ...