关于使用python脚本将同级的其他目录下的所有文件根据年份移动到当脚本位置的年份目录
Posted on 2023-03-11 19:25 520_1351 阅读(45) 评论(0) 编辑 收藏 举报今天收到一个请求,要将一台Windows服务器的一个目录下的所有文件,根据后缀和年份进行分类放到年份目录,目录中近20万个文件
但只移动指定后缀和年份的,判断标准就很重要和严谨,一定是 _年份数字其他数字.文件后缀结尾
像这种只有想到用脚本操作要安全一些,而且必须得将正则写得非常严谨,否则会匹配到前面的或者中间的部分
再汇总一下脚本要实现的功能,逻辑如下图所示
1、于是写了如下脚本,因为需要快速处理,所以脚本未进行太多优化-(但也是改了好几次),待有时间了再补上一个更完善的脚本
import os import re import shutil directory="./Upload" os.chdir(directory) FileTypes=["BMP","DOC","DOCX","GIF","JPEG","JPG","Jpg","PDF","PDf","PNG","Pdf","TIF","TXT","XLS","XLSX","bmp","doc","docx","gif","jpeg","jpg","msg","ofd","pdf","png","ppt","pptx","rar","tif","tiff","txt","xls","xlsm","xlsx","zip"] files=[ f for f in os.listdir() if os.path.isfile(f) ] # Create year directory for year in range(2008,2024): os.mkdir("../"+str(year)) for file in files: for FileType in FileTypes: flag=False for year in range(2008,2024): pattern="_"+str(year)+"\d+\."+FileType+"$" if re.search(pattern,file): print(file) shutil.move(file,"../"+str(year)) flag=True break if flag==True: break
这个版本的特点,主要是在处理跳出多层/两层for语句,进行加速处理,如果没有break机制,时间将是非常夸张的,同一个文件,会进行多次无效的遍历
最后遍历处理完20万个文件,用时近30分钟,即一分钟处理近6000多个,如果要使用这个脚本,这里说一下,注意事项
1、脚本只处理与脚本同级的指定目录下的所有文件,不包括子目录和子目录下的文件
2、需要在脚本所在的目录下执行,python ./File-Archive-based-on-year.py
尊重别人的劳动成果 转载请务必注明出处:https://www.cnblogs.com/5201351/p/17206770.html
作者:一名卑微的IT民工
出处:https://www.cnblogs.com/5201351
本博客所有文章仅用于学习、研究和交流目的,欢迎非商业性质转载。
由于博主的水平不高,文章没有高度、深度和广度,只是凑字数,不足和错误之处在所难免,希望大家能够批评指出。
博主是利用读书、参考、引用、复制和粘贴等多种方式打造成自己的文章,请原谅博主成为一个卑微的IT民工!