基于七牛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 ...
随机推荐
- Ubuntu 12.04.1 OK335xS busybox-1.24.1 文件系统编译错误及解决方案
Ubuntu OK335xS busybox- 文件系统编译错误及解决方案 一.参考文档: 编译busybox的一些错误: http://blog.csdn.net/hshl1214/article/ ...
- Ubuntu12.04中安装Oracle JDK和NetBeans的方法
1.到官网下载jdk-7u51-linux-i586.tar.gz安装包 2.创建jvm文件夹 $sudo mkdir /usr/lib/jvm 3.将安装包解压到上述文件夹下 $-linux-i58 ...
- Codeforces 828C String Reconstruction【并查集巧妙运用】
LINK 题目大意 给你n个串和在原串中的出现位置,问原串 思路 直接跑肯定是GG 考虑怎么优化 因为保证有解,所以考虑过的点我们就不再考虑 用并查集维护当前每个点之后最早的没有被更新过的点 然后就做 ...
- SQL夯实基础(八):联接运算符算法归类
今天主要介绍三个常用联接运算符算法:合并联接(Merge join),哈希联接(Hash Join)和嵌套循环联接(Nested Loop Join).(mysql至8.0版本,都只支持Nested ...
- CycloneII之EDA及学术开发功能描述
1.概述 同Stratix/Cyclone. 2.逻辑单元(Logic Cell)描述 在以前的架构中(比如Cyclone),单个LE包括一个组合逻辑和寄存器.对于Cyclone II来说,组合逻辑和 ...
- [Oracle] CPU/PSU补丁安装详细教程
Oracle CPU的全称是Critical Patch Update, Oracle对于其产品每个季度发行一次安全补丁包,通常是为了修复产品中的安全隐患,以下是对CPU/PSU补丁安装的具体操作步骤 ...
- bzoj 2535 && bzoj 2109 [Noi2010]Plane 航空管制——贪心
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2535 https://www.lydsy.com/JudgeOnline/problem.p ...
- kotlin与fastjson的异常
出现这个原因是因为kotlin的非空特性. 如果一个类中声明了一个字段(kotlin的特性,该字段默认是非空的), 使用fastjson进行转化的时候,如果json数据中没有该字段的数据,则会出现转换 ...
- Makefile编写 五 隐含规则
隐含规则———— 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的源程序为中间目标文件(Unix下是[.o]文件,Windows下是[.obj] ...
- 在Mac下配置php开发环境:Apache+php+MySql (卡在 给mysql 设置不了账号密码)
https://my.oschina.net/joanfen/blog/171109#OSC_h4_3 cmd 进入mysql的方法