Board logo

标题: [文本处理] 批处理根据时间打包文件的问题 [打印本页]

作者: netdzb    时间: 2021-1-22 08:06     标题: 批处理根据时间打包文件的问题

我想批量打包2020年12月1日到2020年12月31号的图片文件,
用批处理如何写?
作者: Gin_Q    时间: 2021-1-22 10:43

用的什么软件《 zip》 《rar》 《7zip》?
图片是否已经处理好(指定日期) 放置在固定文件夹下面?
作者: netdzb    时间: 2021-1-22 11:48

回复 2# Gin_Q


    这个是不是可以用everything搞定啊?
作者: netdzb    时间: 2021-1-22 11:49

回复 2# Gin_Q

用7zip吧,不知道代码如何写?
作者: netdzb    时间: 2021-1-22 12:12

回复 2# Gin_Q

或者这个用python怎么写?我不知道如何获取当前目录所有png文件的时间戳,用什么关键字搜索?
作者: Gin_Q    时间: 2021-1-22 14:31

回复 5# netdzb


    os.path.getctime(文件名)
作者: Gin_Q    时间: 2021-1-22 14:42

回复 6# Gin_Q


    可以写, 可能要晚一些!没时间摸鱼!
作者: Gin_Q    时间: 2021-1-22 20:47

用python自带的shutil不支持增量打包, 只能把文件移动固定目录下打包
或者 调用 外部的rar等支持增量打包
作者: netdzb    时间: 2021-1-22 21:07

回复 8# Gin_Q

我去学习一下,谢谢。
作者: netdzb    时间: 2021-1-22 21:13

回复 8# Gin_Q

我不知道如何判断文件的戳都是2020年12月的,这个地方的代码你给发一下吧。
其他地方我还能写出来。
作者: Gin_Q    时间: 2021-1-22 21:27

本帖最后由 Gin_Q 于 2021-1-23 13:28 编辑

你先看看,有问题讨论!
把run.py 文件和 test.ini 文件放在同一个目录下
  1. # coding=utf-8
  2. # python3.7.9
  3. import os
  4. import time
  5. import shutil
  6. import configparser
  7. from threading import Thread
  8. from queue import Queue
  9. from subprocess import run
  10. class zipConfig(object):
  11.     def __init__(self, configName):
  12.         try:
  13.             self.config = configparser.ConfigParser()
  14.             self.config.read(configName)
  15.             self.zipRoot = self.config['shutil']['root']                 # 打包父目录
  16.             self.zipBase = self.config['shutil']['base']                 # 指定打包的子目录
  17.             self.zipName = self.config['shutil']['name']                 # 打包文件名
  18.             self.zipF    = self.config['shutil']['format']               # 打包文件格式 zip
  19.             self.zipSD   = self.config['shutil']['sdate']                # 起始日期
  20.             self.zipED   = self.config['shutil']['edate']                # 结束日期
  21.             self.zipFD   = self.config['shutil']['dirname']              # 把符合要求的文件复制到这个目录
  22.             self.zipSrc  = self.config['shutil']['dir']                  # 待处理目录
  23.             self.zipRarPro   = self.config['rarexe']['rar']              # RaR程序的绝对路径名
  24.             self.zipRarName  = self.config['rarexe']['name']             # RaR打包后的文件名
  25.             self.zipshutil   = self.config.getboolean('rarexe','shutil') # 是否使用shutil打包文件
  26.             # 将日期转换为时间戳
  27.             self.sTimestamp = time.mktime(time.strptime(self.zipSD,'%Y-%m-%d'))
  28.             self.eTimestamp = time.mktime(time.strptime(self.zipED,'%Y-%m-%d'))
  29.             
  30.         except Exception as err:
  31.             print(err)
  32.             raise
  33. # shutil 打包文件
  34. def makeArchive(name, f, root, base):
  35.     return shutil.make_archive(name, f, root, base)
  36. # shutil 复制一个文件
  37. def shutilCopyFile(queue):
  38.     global zipc
  39.     while True:
  40.         data = queue.get()
  41.         if data is None: break
  42.         print(f'正在复制文件 {data}')
  43.         shutil.copy(data, zipc.zipFD)
  44.     exit(0)
  45. # rar 增量打包文件
  46. def rar(queue, fileName):
  47.     global zipc
  48.     while True:
  49.         data = queue.get()
  50.         if data is None: break
  51.         cmd = f'{zipc.zipRarPro} -ep a {fileName} {data}'
  52.         print(cmd, end='', flush=True)
  53.         if run(cmd).returncode == 0: print(' 添加成功!')
  54.     exit(0)
  55. # 过滤不满足要求的文件
  56. def filterFileRar(zipc):
  57.     queue = Queue()
  58.     if zipc.zipshutil:
  59.         if not os.path.exists(zipc.zipFD): os.mkdir(zipc.zipFD)
  60.         t = Thread(target=shutilCopyFile, args=(queue,))
  61.     else:
  62.         t = Thread(target=rar, args=(queue, zipc.zipRarName))
  63.     t.start()
  64.    
  65.     # 遍历文件目录
  66.     for dirPath, dirNames, fileNames in os.walk(zipc.zipSrc):
  67.         for file in fileNames:
  68.             src = os.path.join(dirPath,file)
  69.             if zipc.sTimestamp < os.path.getmtime(src) < zipc.eTimestamp:
  70.                 queue.put(src)
  71.    
  72.     # 退出子线程
  73.     queue.put(None)
  74.     t.join()
  75.     if zipc.zipshutil:
  76.         print('正在打包文件')
  77.         print(makeArchive(zipc.zipName, zipc.zipF, zipc.zipRoot, zipc.zipBase))
  78.         # 删除复制的文件
  79.         shutil.rmtree(zipc.zipFD)
  80.         
  81. if __name__ == '__main__':
  82.     zipc = zipConfig('zip.ini')
  83.     filterFileRar(zipc)
复制代码
配置文件 test.ini :
  1. [DEFAULT]
  2. # 打包文件格式 zip
  3. format = zip
  4. [filename]
  5. # 文件名
  6. # name = d:\gin\cool
  7. name = cool
  8. [rootdir]
  9. # 打包父目录
  10. root = ./
  11. [basedir]
  12. # 指定打包的子目录
  13. base = ./filterTemp
  14. # 待处理目录
  15. [srcdir]
  16. dir = D:\GIN\py\sorting_method
  17. [filterdir]
  18. # 把符合要求的文件复制到这个目录
  19. dirname = filterTemp
  20. [startdate]
  21. # 起始日期
  22. date = 2020-12-1
  23. [enddate]
  24. # 结束日期
  25. date = 2020-12-31
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2