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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:27:18