Python 实例: 备份文件

jopen 9年前

 它读取一个任务文件, 根据指定的任务参数自动备份.

 

任务文件的格式: (注意,分号后面注释是不支持的)

    [task]  ; 一项任务开始        dir=h:/Project  ; 指定备份的目录        recusive=1      ; 是否递归子目录        suffix=h|cpp|hpp|c|user|filters|vcxproj|sln|css|gif|html|bmp|png|lib|dsw|dsp|htm|html|ico|ini|jpg|rc|vssscc ; 指定备份的扩展名        exclude=0   ; 指定是备份上面的参数指定的扩展名还是排除指定的扩展名        zip=Project.zip ; 备份后的文件路径名  

这是python代码:
# -*- coding: utf-8 -*-     import sys    import os    import zipfile    class Task:        #dir str directory        #bsub BOOL include subdirectory        #sfx str postsuffix ,sepeated by '|'        #ecld BOOL include or execlude the postsuffix sfx        def __init__(self,dir,bsub,sfx,ecld,zip):            self.dir = dir            self.bsub = bsub            self.suffix = sfx.split("|")            self.exclude = ecld            self.zip = zip               @staticmethod        def isfilter(sfx,sfxs,bexcld):            bFound = False            for e in sfxs:                if e == sfx:                    bFound = True                    break                   if bexcld:                return not bFound;            else:                return bFound;                        class QBackup:        '''''备份指定目录下具备指定扩展名的文件'''        def __init__(self):            self._list = []                    def __del__(self):            pass                    #tfile 任务文件        def ReadTask(self,tfile):            dir = ""            bsub = False            sfx = ""            becld = False            zip = ""            try:                f = open(tfile,'r')                while True:                    line = f.readline()                    if len(line) == 0:                        break;                    line = line.strip(" ")                    if "[Task]/n".lower() == line.lower():                        # 读取接下来的4行                        iline = 1                        while iline <= 5:                            line = f.readline()                            line = line.strip(" /t/n")  # 去除前后的空白符                             idx = line.find("=")                            if -1 == idx:                                break;                            atti = line[0:idx]                            value = line[idx+1:]                            print(value)                            if "dir" == atti:                                dir = value                            elif "recusive" == atti:                                bsub = bool(int(value))                            elif "suffix" == atti:                                sufix = value                            elif "exclude" == atti:                                becld = bool(int(value))                            elif "zip" == atti:                                zip = value                            else:                                break                            iline += 1                        else:                            t = Task(dir,bsub,sufix,becld,zip)                            self._list.append(t)            except:                return False            return True                                    def DoBackup(self):            for e in self._list:                try:                    zip = zipfile.ZipFile(e.zip,'w',zipfile.ZIP_DEFLATED)                    self.ZipDir(zip,e.dir,e.bsub,e.suffix,e.exclude)                    zip.close()                except:                    print("exception raised!")                    return False            return True                                         def ZipDir(self,zip,dir,bsub,sfxs,ecld):            subdir = ""            path = ""            if os.path.isdir(dir):                paths = os.listdir(dir)                #备份本目录                print("ZipDir: ",dir)                for e in paths:                    path = dir + "/" + e                    ext = os.path.splitext(e)[1][1:]                    if os.path.isfile(path) and Task.isfilter(ext,sfxs,ecld):                        print ("ZipFile: ",path)                        zip.write(path)                #清理子目录                if bsub:                        for e in paths:                        subdir = dir + "/" + e                        self.ZipDir(zip,subdir,bsub,sfxs,ecld)                    def PrintTask(self):            for e in self._list:                print (e.dir,e.bsub,e.suffix,e.exclude,e.zip)                        if '__main__' == __name__:        c = QBackup()        c.ReadTask("bkup.txt")        c.DoBackup()