Python实现按文件修改时间对比移动指定文件至对应子目录
解决方案
核心思路
- 遍历第一个目录(下称
dir_a)的所有子目录 - 对每个子目录,获取指定文件的修改时间
- 遍历第二个目录(下称
dir_b)的目标扩展名文件,对比修改时间找到匹配项 - 将匹配的文件从
dir_b移动到对应子目录
实现代码
import os import shutil # 配置参数,根据实际情况修改 DIR_A = "/path/to/your/first/directory" # 包含多个子目录的目录 DIR_B = "/path/to/your/second/directory" # 存放单一扩展名文件的目录 TARGET_FILE_IN_SUB = "specific_file.txt" # 子目录中要对比的特定文件名 TARGET_EXTENSION = ".jpg" # dir_b中文件的扩展名 def get_file_mtime(file_path): """获取文件的修改时间(时间戳)""" if os.path.exists(file_path): return os.path.getmtime(file_path) return None def main(): # 遍历dir_a下的所有子目录 for subdir_name in os.listdir(DIR_A): subdir_path = os.path.join(DIR_A, subdir_name) if not os.path.isdir(subdir_path): continue # 跳过非目录项 # 获取子目录中特定文件的修改时间 target_file_path = os.path.join(subdir_path, TARGET_FILE_IN_SUB) sub_mtime = get_file_mtime(target_file_path) if not sub_mtime: print(f"子目录 {subdir_name} 中未找到指定文件,跳过") continue # 遍历dir_b中的目标扩展名文件 for file_name in os.listdir(DIR_B): if not file_name.endswith(TARGET_EXTENSION): continue file_path = os.path.join(DIR_B, file_name) if not os.path.isfile(file_path): continue # 对比修改时间(可根据需求调整匹配精度,比如忽略秒级差异) file_mtime = get_file_mtime(file_path) # 示例:允许1秒内的时间差,避免系统时间精度问题 if abs(file_mtime - sub_mtime) < 1: # 移动文件到子目录 dest_path = os.path.join(subdir_path, file_name) # 避免覆盖已存在文件,可根据需求调整(比如重命名或跳过) if os.path.exists(dest_path): print(f"{file_name} 已存在于 {subdir_name},跳过") continue shutil.move(file_path, dest_path) print(f"已移动 {file_name} 到 {subdir_name}") break # 假设每个子目录对应一个文件,找到后跳出循环 if __name__ == "__main__": main()
注意事项
- 路径配置:务必替换代码中的
DIR_A、DIR_B、TARGET_FILE_IN_SUB和TARGET_EXTENSION为实际路径和参数 - 时间匹配精度:如果系统时间存在微小差异,可以调整时间差阈值(比如
abs(...) < 5允许5秒内的误差) - 文件覆盖处理:代码中默认跳过已存在的文件,你可以根据需求改为覆盖、重命名或抛出提示
- 权限问题:确保脚本对两个目录都有读写权限
- 测试建议:先在测试目录中验证逻辑,避免误操作移动重要文件
内容的提问来源于stack exchange,提问作者Flavius Coman
相关产品推荐
相关产品推荐

