需求描述
只处理文件后缀为 pdf,docx,doc,jpg 的文件,如果文件名中包含关键字,就将文件保存到相应的文件夹,剩余的保存到其他文件夹中。
首先创建python脚本文件,处理主要逻辑
filesort.py
import os
import sys
import shutil
import re
from shutil import copyfile
"""
注释
修改path为文件真是路径
E:\test\ 这样的路径是无法被程序识别的,必须是 \\
或者你可以 E:/test/
"""
##print(sys.argv[1])
path = os.path.abspath('')
##print(path)
path = sys.argv[1]
exts = ["pdf","docx","doc","jpg"]
sort_folders = {
"申请表":"申请表",
"身份证及授权书":"委托,法人,授权,身份",
"承诺":"承诺",
"项目申请报告":"申请书",
"地形图":"申请表",
"核定用地图":"核定,公司",
"其他":""
}
def listfiels(path,items):
path = path.replace("\\", "/")
mlist = os.listdir(path)
for m in mlist:
mpath = os.path.join(path, m)
if os.path.isfile(mpath):
pt = os.path.abspath(mpath)
# print pt.decode("gbk").encode("utf-8") #会报错
##print(pt)
for ext in exts:
if(pt.endswith(ext)):
items[pt] = m
continue
else:
pt = os.path.abspath(mpath)
listfiels(pt,items)
items = {}
listfiels(path,items)
##print(items)
dones = []
for key in sort_folders:
new_folder_path = os.path.abspath(key)
##print(new_folder_path)
if not os.path.exists(new_folder_path):
os.makedirs(new_folder_path)
value = sort_folders[key]
if(value != ""):
keywords = sort_folders[key].split(",")
#print(keywords)
for keyword in keywords:
for fileKey in items:
if(items[fileKey].find(keyword) >= 0):
copyfile(fileKey,os.path.join(new_folder_path,items[fileKey]))
dones.append(fileKey)
else:
##print("k")
for fileKey in items:
if(fileKey not in dones):
copyfile(fileKey,os.path.join(new_folder_path,items[fileKey]))
##print(items)
##print(files)
运维人员还是喜欢直接执行 bat 脚本 ,所以特意编译了一个调用 python脚本的 bat 批处理文件(ANSI 格式)。
filesort.bat
::必须安装python3.X运行时
::修改filesort.py 后面的路径参数"
python filesort.py E:\test测试
为了方便修改路径参数,创建 filesort.bat 批处理文件进行调用,注意 文件的编码选择 ANSI 进行保存,在UTF8的情况下,中文路径会无法运行。