Python实现按文件修改时间固定时段自动移动文件
实现思路
- 移除原代码中手动输入日期范围、文件后缀的交互逻辑,直接预设两个分类目标文件夹,对应00:00-12:00、13:00-24:00两个时段的分类规则
- 将原代码的复制操作
shutil.copy替换为shutil.move实现文件移动,移动前自动创建不存在的目标目录,避免路径不存在报错 - 去掉原代码中「时间戳转字符串再解析为datetime」的冗余逻辑,直接通过
datetime.fromtimestamp解析文件修改时间戳,通过小时属性判断所属时段,同时规避不同系统时间字符串格式不一致的兼容问题 - 路径拼接统一使用
os.path.join,替换原代码直接字符串拼接路径的写法,适配Windows、macOS、Linux不同系统的路径规则 - 遍历目录时增加文件类型校验,跳过子目录等非文件项,避免处理目录时报错
修改后可直接运行的代码
import os import shutil from datetime import datetime # 路径配置 src = "C:/Users/eldri/OneDrive/Desktop/" dst_base = "C:/Users/eldri/OneDrive/Desktop/output" folder_morning = os.path.join(dst_base, "folder1") # 存放00:00-12:00修改的文件 folder_evening = os.path.join(dst_base, "folder2") # 存放13:00-24:00修改的文件 # 自动创建缺失的目标文件夹 os.makedirs(folder_morning, exist_ok=True) os.makedirs(folder_evening, exist_ok=True) for filename in os.listdir(src): file_full_path = os.path.join(src, filename) # 跳过子目录、快捷方式等非普通文件项 if not os.path.isfile(file_full_path): print(f"[!] 跳过非文件项: {filename}") continue # 读取文件修改时间,直接转为datetime对象 file_mtime = datetime.fromtimestamp(os.path.getmtime(file_full_path)) mtime_hour = file_mtime.hour mtime_display = file_mtime.strftime('%Y-%m-%d %H:%M:%S') # 按时段匹配目标文件夹并移动 if 0 <= mtime_hour < 12: target_path = os.path.join(folder_morning, filename) shutil.move(file_full_path, target_path) print(f"[+] 已移动至上午时段文件夹: {filename} | 修改时间: {mtime_display}") elif 13 <= mtime_hour <= 23: target_path = os.path.join(folder_evening, filename) shutil.move(file_full_path, target_path) print(f"[+] 已移动至下午/晚间时段文件夹: {filename} | 修改时间: {mtime_display}") else: # 12:00-12:59时段的文件默认不处理,可自行调整规则归类 print(f"[!] 未移动(12:00-12:59时段): {filename} | 修改时间: {mtime_display}") print("[+] 所有文件处理完成")
自定义调整说明
- 时段规则可自行修改判断条件调整:如果需要把12:00-12:59的文件归到上午档,就把第一个判断条件的阈值改为
mtime_hour < 13;如果要归到下午/晚间档,就把第二个判断条件的起始值改为12 <= mtime_hour <=23 - 如果需要筛选指定格式的文件,在非文件项校验的代码后增加后缀判断即可,例:
if not filename.endswith('.txt'): continue即可仅处理txt格式文件 - 首次运行建议先把
shutil.move行注释,替换为打印语句输出待移动的文件和目标路径,确认分类规则符合预期后再执行真实移动操作,避免文件错移
内容的提问来源于stack exchange,提问作者Kukkik
相关产品推荐
相关产品推荐

