本帖最后由 Gin_Q 于 2021-1-23 14:33 编辑
# 被打包的文件日期,指的是文件最后修改日期
# 增量打包调用外部 rar 程序(不会复制文件)
# shutil 打包, 先把文件复制到指定文件夹, 然后再打包 | | | | | | | import os | | import time | | import shutil | | import configparser | | from threading import Thread | | from queue import Queue | | from subprocess import run | | | | | | class zipConfig(object): | | def __init__(self, configName): | | try: | | self.config = configparser.ConfigParser() | | self.config.read(configName) | | self.zipRoot = self.config['shutil']['root'] | | self.zipBase = self.config['shutil']['base'] | | self.zipName = self.config['shutil']['name'] | | self.zipF = self.config['shutil']['format'] | | self.zipSD = self.config['shutil']['sdate'] | | self.zipED = self.config['shutil']['edate'] | | self.zipFD = self.config['shutil']['dirname'] | | self.zipSrc = self.config['shutil']['dir'] | | self.zipRarPro = self.config['rarexe']['rar'] | | self.zipRarName = self.config['rarexe']['name'] | | self.zipshutil = self.config.getboolean('rarexe','shutil') | | | | self.sTimestamp = time.mktime(time.strptime(self.zipSD,'%Y-%m-%d')) | | self.eTimestamp = time.mktime(time.strptime(self.zipED,'%Y-%m-%d')) | | | | except Exception as err: | | print(err) | | raise | | | | | | def shutilCopyFile(queue): | | global zipc | | while True: | | data = queue.get() | | if data is None: break | | print(f'正在复制文件 {data}') | | shutil.copy(data, zipc.zipFD) | | exit(0) | | | | | | def rar(queue, fileName): | | global zipc | | while True: | | data = queue.get() | | if data is None: break | | cmd = f'{zipc.zipRarPro} -ep -y a {fileName} {data}' | | if run(cmd).returncode == 0: | | print(f'添加成功 {data}') | | else: print(f'添加失败 {data}') | | exit(0) | | | | | | def filterFile(zipc): | | queue = Queue() | | if zipc.zipshutil: | | if not os.path.exists(zipc.zipFD): os.mkdir(zipc.zipFD) | | t = Thread(target=shutilCopyFile, args=(queue,)) | | else: | | t = Thread(target=rar, args=(queue, zipc.zipRarName)) | | t.start() | | | | | | for dirPath, dirNames, fileNames in os.walk(zipc.zipSrc): | | for file in fileNames: | | src = os.path.join(dirPath,file) | | | | | | | | if zipc.sTimestamp < os.path.getmtime(src) < zipc.eTimestamp: | | queue.put(src) | | | | | | queue.put(None) | | t.join() | | if zipc.zipshutil: | | print('正在打包文件') | | | | print(shutil.make_archive(zipc.zipName, zipc.zipF, zipc.zipRoot, zipc.zipBase)) | | | | shutil.rmtree(zipc.zipFD) | | | | | | if __name__ == '__main__': | | zipc = zipConfig('zip.ini') | | filterFile(zipc)COPY |
配置文件 zip.ini: | [DEFAULT] | | | | shutil = true | | | | | | dir = D:\GIN\py\sorting_method | | | | sdate = 2020-12-1 | | | | edate = 2020-12-31 | | | | | | [rarexe] | | | | | | name = cool.zip | | rar = C:\Program Files\WinRAR\winrar.exe | | | | | | | | [shutil] | | | | root = ./ | | | | | | format = zip | | name = cool | | | | | | base = ./filterTemp | | | | | | dirname = filterTempCOPY |
|