使用python備份檔案

來源:互聯網
上載者:User

標籤:util   arch   ati   pfile   size   back   執行個體   efi   icm   

想寫個定時備份檔案的功能,這個功能需要實現:
1.搜尋指定的目錄裡是否存在當天的檔案
2.如果存在壓縮並加密檔案
3.通過ftp上傳到備份伺服器
4.在備份伺服器上定時將檔案拷貝到移動硬碟並定時清理檔案

本來想通過BAT檔案批處理做,無奈水平有限,這BAT的文法實在玩不來。。。正好前幾天圖書打折囤了幾本python的書,就想用Python試試看,折騰兩三個小時,總算搞定了,在這裡備份一下。
Python的文法有些怪異的,類的執行個體方法第一個入參要寫self,應該類似於C#,Java裡的this,問題是其他語言都是編譯器給預設加一個this,它這個要碼農自己碼上一個self。
C#,Java用分號表示語句的結束,Python省事了 不用分號了,這個倒是像VB.
更詭異的是 語句塊,C#和Java用{}包括,VB的if至少有個endif表示結束,python比較神奇,直接用代碼的縮排表示,這下好了,代碼的縮排不止是代碼美觀的問題了,還有文法含義,這樣寫出來的代碼應該看上去至少是整齊劃一的,不整齊語義都不對了。。。
當然了 這些只是語言風格的問題,沒什麼好與壞,習慣了就好了。
單純從這個指令碼小功能來說,Python用起來還是蠻順手的,Pycharm這個IDE也是蠻好用的,當然了,這個只是這個微不足道的小功能來說,大型的功能開發就不知道了。

1.搜尋指定目錄

import globimport osimport shutilclass FileHelper:    def __init__(self, searchdir, searchstr):        self.dir = searchdir        self.searchstr = searchstr    def get_sourcefile(self):        sourcepath = ("{searchdir}\*{searchstr}*".format(searchdir=self.dir, searchstr=self.searchstr))        return glob.glob(sourcepath)    @staticmethod    def get_destfile(sourcefile, destdir):        tail = os.path.split(sourcefile)[1]        return os.path.join(destdir, tail[:tail.rfind(‘.‘)] + ‘.zip‘)    @staticmethod    def get_shortfilename(sourcefile, destdir):        tail = os.path.split(sourcefile)[1]        return os.path.join(destdir, tail)    @staticmethod    def copyfile(sourcefilename, destfilename):        shutil.copyfile(sourcefilename, destfilename)    @staticmethod    def deletefile(filename):        os.remove(filename)

2.壓縮檔
本來想通過Python內建的zipfile類來實現的,如下代碼所示。

import zipfileclass Zip(object):    def __init__(self, sourcefilename, destfilename, password):        self.sourcefilename = sourcefilename        self.destfilename = destfilename        self.password = password    def zip(self):        azip = zipfile.ZipFile(self.destfilename, ‘w‘)        azip.setpassword(self.password.encode(‘utf-8‘))        azip.write(self.sourcefilename)

結果產生的壓縮檔,不用密碼都可以開啟,查了Python的文檔才知道
zipFile.setpassword(pwd)

Set pwd as default password to extract encrypted files.
這個密碼是用來解壓檔案時候用的,至於壓縮檔的時候怎麼設定密碼,就不知道了。。。
所以退而求其次,用7zip的命令列方式了

import osclass Zip(object):    def __init__(self, sourcepath, destpath, password):        self.sourcepath = sourcepath        self.destpath = destpath        self.password = password    def zipfile(self):        pipe = os.popen("7z a -tzip {destpath} -p{password} {sourcepath}".format(destpath=self.destpath,                                                                                 password=self.password,                                                                                 sourcepath=self.sourcepath))        pipe.read()        pipe.close()

3.上傳FTP

import ftplibclass FileUpaloder:    def __init__(self, host, username, password, localfile, remotefile):        self.host = host        self.username = username        self.password = password        self.localfile = localfile        self.remotefile = remotefile    def upload(self):        f = ftplib.FTP(self.host)        f.login(self.username, self.password)        bufsize = 1024        fp = open(self.localfile, ‘rb‘)        f.storbinary(‘STOR ‘ + self.remotefile, fp, bufsize)        fp.close()        f.quit()

4.備份並定時清理檔案

from filehelper import *import datetimesourcepath = "C:\\source"destpath = "C:\\source\\backup"searchstr = "aa"FileHelper = FileHelper(sourcepath, searchstr)sourcefilelist = FileHelper.get_sourcefile()# 備份檔案for filename in sourcefilelist:    destfilename = FileHelper.get_destfile(filename, destpath)    datestr = datetime.date.today().strftime("%Y_%m_%d")    if filename in datestr:        FileHelper.copyfile(filename, destfilename)# 刪除檔案for filename in sourcefilelist:    datestr = filename[13:23]    filedate = datetime.datetime.strptime(datestr, "%Y_%m_%d")    checkDate = datetime.date.today() - datetime.timedelta(days=10)    if filedate <= checkDate:        FileHelper.deletefile(filename)

使用python備份檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.