代码语言:javascript复制
import os
from pathlib import Path
import shutil
import re
root_dir='D:\2022'
dst_dir = 'D:\dist\'
ext='.dwg'
is_sorted=True
def traverse_dir_files(root_dir, ext=None, is_sorted=True):
"""
列出文件夹中的文件, 深度遍历
:param root_dir: 根目录
:param ext: 后缀名
:param is_sorted: 是否排序,耗时较长
:return: [文件路径列表, 文件名称列表]
"""
names_list = []
paths_list = []
for parent, _, fileNames in os.walk(root_dir):
for name in fileNames:
if name.startswith('.'): # 去除隐藏文件
continue
if ext: # 根据后缀名搜索
if name.endswith(ext):
names_list.append(name)
paths_list.append(os.path.join(parent, name))
else:
names_list.append(name)
paths_list.append(os.path.join(parent, name))
if not names_list: # 文件夹为空
return paths_list, names_list
if is_sorted:
paths_list, names_list = sort_two_list(paths_list, names_list)
return paths_list, names_list
def sort_two_list(list1, list2):
"""
排序两个列表
:param list1: 列表1
:param list2: 列表2
:return: 排序后的两个列表
"""
list1, list2 = (list(t) for t in zip(*sorted(zip(list1, list2))))
return list1, list2
def mycopyfile(srcfile,dstpath): # 复制函数
if not os.path.isfile(srcfile):
print ("%s not exist!"%(srcfile))
else:
fpath,fname=os.path.split(srcfile) # 分离文件名和路径
if not os.path.exists(dstpath):
os.makedirs(dstpath) # 创建路径
shutil.copy(srcfile, dstpath fname) # 复制文件
print ("copy %s -> %s"%(srcfile, dstpath fname))
def mymovefile(srcfile,dstpath): # 移动函数
if not os.path.isfile(srcfile):
print ("%s not exist!"%(srcfile))
else:
fpath,fname=os.path.split(srcfile) # 分离文件名和路径
if not os.path.exists(dstpath):
os.makedirs(dstpath) # 创建路径
shutil.move(srcfile, dstpath fname) # 移动文件
print ("move %s -> %s"%(srcfile, dstpath fname))
if __name__ == "__main__":
paths_list, names_list =traverse_dir_files(root_dir, ext)
for file in paths_list:
if re.findall('^(.*?(?=-))',file.split("\")[-1]):
a = re.findall('^(.*?(?=-))',file.split("\")[-1]) # 特定文件夹名
print(a)
mycopyfile(file, dst_dir a[0] '\')
else:
mycopyfile(file, dst_dir)