Python备份文件至腾讯COS

在4月几号收到一个阿里云的通知,说快照功能即将收费,其实很多人使用快照功能主要就是备份数据,然而我也不例外,想着收费就收费吧,不用也没关系,反正主要数据就是网站的,附件什么的没有放在服务器上,可有可无吧。今天突然想到,有没有方法实现定时备份数据并上传呢,然后突然想到网站附件所使用的腾讯cos,那么备份数据应该也可以上传至它,上了一下腾讯云的官网看了一下开发文档,初步打算使用php的,但是听说Python很牛逼,并且服务器支持Python,想试试看。

搜了一下Python的语法,然后就着手写代码了,备份数据的第一件事当然得打包,想也不想,直接搜,搜到一段压缩文件夹的代码,复制粘贴放本地运行一下。可以用,上传至服务器测试下,也可以用这里好了就要上传了,下载了腾讯COS Python SDK ,通过命令 pip install qcloud_cos 进行安装,一路到这挺顺利的,使用sftp 上传SDK至服务器,使用pip安装,出意外了瞬间蒙了。

# pip install qcloud_cos
-bash: pip: command not found

提示没有该命令,愣了一下,又拿出了百度,输入关键字,安装 pip ,结果挺多的,又一次突然想到一个 setup.py 的一个文件(思维跳动跟不上),看着这文件名,这单词不是安装程序的意思吗,意思就这个文件就是安装程序,说着利用python 执行一下,没反应,不是这个嘛,还是少了什么东西,想起linux安装本来程序的时候一般后面都带了 install ,那这个是不是应该也要带 install 呢,想着试了一下,执行成功,一连串东西输出来,这样是不是安装成功了呢也没想。

都安装好了要怎么上传呢,看了一下开发文档,因为以前做过php的cos上传所以知道sdk里面一般带有示例代码,看了一下,发现这个比php简单好多。这难道就是Python的神奇之处吗。

# -*- coding: utf-8 -*-

import time
import qcloud_cos as qcloud

appid = 'xxxx'
secret_id = 'xxxxx'
secret_key = 'xxxxxx'

cos = qcloud.Cos(appid,secret_id,secret_key)
#cos = qcloud.Cos()

obj = cos.deleteFile('bucket01', 'abc')
print obj, obj['message']
print '----------------------------------------------------------------------'

obj = cos.upload('test','bucket01','v.mp4', '0666')
print obj, obj['message']
print '----------------------------------------------------------------------'

obj = cos.createFolder('bucket01', '123/')
print obj, obj['message']
print '----------------------------------------------------------------------'

obj = cos.list('bucket01', '/123/', 3, 'eListFileOnly')
print obj, obj['message']
print '----------------------------------------------------------------------'

obj = cos.updateFile('bucket01', '/v.mp4', '0666')
print obj, obj['message']
print '----------------------------------------------------------------------'

obj = cos.deleteFile('bucket01', '/v.mp4')
print obj, obj['message']
print '----------------------------------------------------------------------'

obj = cos.statFile('bucket01', 'v.mp4')
print obj, obj['message']
print '----------------------------------------------------------------------'

obj = cos.upload_slice('test3.mp4', 'bucket01', 'v.mp4', '', 2*1024*1024)
print obj, obj['message']
</code></pre>
在这代码中找到一些重要的部分。复制粘贴!!
再对比开发文档上的提示,不一会儿就做了出来。在这里不得不佩服自己的聪明才智。把代码贴出来。
<pre class="language-python"><code># encoding: utf-8
#https://www.chtan.cn/2016/04/12/python-backup-file-to-tencent-cos.html
import time
import os,os.path
import zipfile
import qcloud_cos as qcloud
appid = 'xxxxx'
secret_id = 'xxxxxx'
secret_key = 'xxxxx'
bucket = 'xxxx'

def zip_dir(dirname,zipfilename):
    filelist = []
    if os.path.isfile(dirname):
        filelist.append(dirname)
    else :
        for root, dirs, files in os.walk(dirname):
            for name in files:
                filelist.append(os.path.join(root, name))

    zf = zipfile.ZipFile(zipfilename, "w", zipfile.zlib.DEFLATED)
    for tar in filelist:
        arcname = tar[len(dirname):]
        #print arcname
        zf.write(tar,arcname)
    zf.close()

if __name__ == '__main__':
    medate = time.strftime('%Y-%m-%d %H',time.localtime(time.time()))#使用当前时间作为文件名
    filename = medate + '.zip' #文件名

    filepath = '/home/wwwroot/beifen/data/' + filename #打包文件保存到服务器的地址
    myfile = '' #要备份打包的文件夹地址
    zip_dir(myfile,filepath)

    dstpath = '/www/' + filename #上传云端的路径
    cos = qcloud.Cos(appid,secret_id,secret_key)
    #sign = cos.sign_more(time.time(),bucket)
    #obj = cos.upload(filepath,bucket,dstpath)
    obj = cos.upload_slice(filepath, bucket, dstpath, '', 2*1024*1024)
    print obj, obj['message']
    print '----------------------------------------------------------------------'