博客园  :: 首页  :: 管理

今天收到一个请求,要将一台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