最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

世界简讯:关于使用python脚本将同级的其他目录下的所有文件根据年份移动到当脚本位置的年份目录

来源:博客园


【资料图】

今天收到一个请求,要将一台Windows服务器的一个目录下的所有文件,根据后缀和年份进行分类放到年份目录,目录中近20万个文件

但只移动指定后缀和年份的,判断标准就很重要和严谨,一定是 _年份数字其他数字.文件后缀结尾

像这种只有想到用脚本操作要安全一些,而且必须得将正则写得非常严谨,否则会匹配到前面的或者中间的部分

再汇总一下脚本要实现的功能,逻辑如下图所示

1、于是写了如下脚本,因为需要快速处理,所以脚本未进行太多优化-(但也是改了好几次),待有时间了再补上一个更完善的脚本

import os import reimport shutildirectory="./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

关键词: