python根据文件名分配文件夹

2023-10-16 10:27:27 浏览数 (1)

代码语言: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)

0 人点赞