You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 04:52:59