我的知识记录

Python批量查找最近修改文件教程

用Python按修改时间筛选文件,快速找出最近N天/指定时间段内改动过的文档,导出Excel清单,适合做周报、备份核查、日志审计。

场景痛点

月底要交周报,领导问"这周你改了哪些文件",你盯着资源管理器一脸懵。按修改时间排序只能在当前文件夹看,跨目录根本没法一起筛。用Python把整个工作目录扫一遍,按修改时间戳过滤,最近7天改过的文件一秒列出来,还能导出Excel,写周报直接抄。

用到的库

pip install openpyxl

核心用标准库 ospathlibdatetime,导出用 openpyxl

完整代码

import os
from pathlib import Path
from datetime import datetime, timedelta
from openpyxl import Workbook


def find_recent_files(root_dir: str, days: int = 7,
extensions: list = None):
"""
找出 root_dir 下最近 days 天内修改过的文件。
extensions: 限定后缀列表,None 表示不限
"""
root = Path(root_dir)
# 当前时间往前推 days 天,作为时间阈值
cutoff = datetime.now() - timedelta(days=days)
hits = []

for dirpath, _, filenames in os.walk(root):
for name in filenames:
p = Path(dirpath) / name

# 后缀过滤
if extensions:
ext = p.suffix.lower()
if ext not in {e.lower() for e in extensions}:
continue

try:
mtime = p.stat().st_mtime
except OSError:
continue
mtime_dt = datetime.fromtimestamp(mtime)

if mtime_dt >= cutoff:
hits.append({
"path": str(p),
"size_kb": round(p.stat().st_size / 1024, 1),
"mtime": mtime_dt.strftime("%Y-%m-%d %H:%M:%S"),
})

# 按修改时间倒序,最新的在最上面
hits.sort(key=lambda x: x["mtime"], reverse=True)
return hits


def export_to_excel(results: list, out_path: str):
wb = Workbook()
ws = wb.active
ws.title = "最近修改文件"
ws.append(["序号", "文件路径", "大小(KB)", "修改时间"])
for idx, item in enumerate(results, 1):
ws.append([idx, item["path"], item["size_kb"], item["mtime"]])
ws.column_dimensions['A'].width = 8
ws.column_dimensions['B'].width = 90
ws.column_dimensions['C'].width = 12
ws.column_dimensions['D'].width = 22
wb.save(out_path)


if __name__ == "__main__":
ROOT = r"D:\工作资料"
DAYS = 7  # 最近7天
EXTS = [".docx", ".xlsx", ".pptx", ".pdf", ".md"]

results = find_recent_files(ROOT, DAYS, EXTS)
print(f"最近{DAYS}天共修改了 {len(results)} 个文件:\n")
for item in results:
print(f"[{item['mtime']}] {item['path']}")

export_to_excel(results, r"D:\工作资料\最近修改文件.xlsx")
print("\n结果已导出:D:\\工作资料\\最近修改文件.xlsx")

代码讲解

p.stat().st_mtime 拿到的是文件修改时间戳(从1970年开始的秒数),用 datetime.fromtimestamp 转成本地时间。cutoff = datetime.now() - timedelta(days=7) 算出时间门槛,文件修改时间晚于这个门槛就命中。排序时直接拿格式化后的字符串 mtime 倒序排,因为 YYYY-MM-DD HH:MM:SS 格式字符串字典序和时间序一致,不用再转回时间对象。大小用KB保留一位小数,方便看哪个是大文件。

运行结果

控制台按修改时间倒序打印所有命中文件,最新改的在最前面。同时生成 最近修改文件.xlsx,四列:序号、文件路径、大小KB、修改时间。打开Excel按时间筛选即可。

注意事项

  • st_mtime 是修改时间,st_ctime 在Windows上是创建时间,在Linux上是元数据变更时间,跨平台注意区分。
  • 网盘同步文件夹(OneDrive、百度云)里的文件修改时间可能被同步流程改写,结果会偏多。
  • 想按创建时间筛,把 st_mtime 换成 st_ctime(Windows)即可。
  • 扫大目录时加后缀过滤,不然会把日志、缓存文件全列出来。

Python批量查找最近修改文件教程

标签:

更新时间:2026-09-14 21:17:41

上一篇:Python批量生成文件夹目录树清单:导出目录结构到文本

下一篇:Python 查找大文件:定位磁盘空间杀手