使用Python从指定目录最新子文件夹复制匹配命名的xlsx文件至对应文件夹
实现指定文件的自动复制脚本
需求说明
- 源目录路径:
copyfrom = 'C:\Users\lexluthorella\Documents\Test_dir' - 目标目录路径:
copyto = 'C:\Users\lexluthorella\Documents\Fake_sftp' - 源目录包含子文件夹:
November-2022、December-2022、January-2023,需自动识别最新创建/修改的子文件夹 - 目标目录包含子文件夹:
Location A、Location B、Location C - 需将源目录最新子文件夹中,文件名包含目标子文件夹名称的
.xlsx文件(例如Location A...-2023 Monthly file.xlsx),复制到对应的目标子文件夹中
完整代码实现
import os import shutil # 定义路径,使用原始字符串避免Windows转义字符问题 copyfrom = r'C:\Users\lexluthorella\Documents\Test_dir' copyto = r'C:\Users\lexluthorella\Documents\Fake_sftp' # 获取源目录下所有子文件夹的完整路径 subfolders = [f.path for f in os.scandir(copyfrom) if f.is_dir()] # 按修改时间筛选出最新的子文件夹 latest_subfolder = max(subfolders, key=os.path.getmtime) # 获取目标目录下所有子文件夹的名称(仅名称,不含完整路径) target_folder_names = [f.name for f in os.scandir(copyto) if f.is_dir()] # 遍历最新子文件夹中的所有文件 for filename in os.listdir(latest_subfolder): # 仅处理xlsx格式文件 if filename.endswith('.xlsx'): # 检查文件名是否匹配目标子文件夹名称 for target_name in target_folder_names: if target_name in filename: # 拼接源文件与目标文件的完整路径 source_file_path = os.path.join(latest_subfolder, filename) target_file_path = os.path.join(copyto, target_name, filename) # 复制文件(保留原文件元数据) shutil.copy2(source_file_path, target_file_path) print(f"完成复制: {filename} -> {os.path.join(target_name, filename)}")
代码关键说明
- 路径处理:用原始字符串
r''包裹Windows路径,避免转义字符引发的识别错误 - 最新文件夹筛选:通过
os.scandir遍历子文件夹,结合os.path.getmtime(获取文件修改时间)和max函数,高效定位最新文件夹 - 文件匹配逻辑:提取目标子文件夹名称,遍历源文件夹中的xlsx文件,通过名称包含关系匹配对应目标路径
- 文件复制:使用
shutil.copy2而非基础的shutil.copy,可保留原文件的修改时间、权限等元数据
内容的提问来源于stack exchange,提问作者LexLuthorella
相关产品推荐
相关产品推荐

