Python批量查找最近修改文件教程
用Python按修改时间筛选文件,快速找出最近N天/指定时间段内改动过的文档,导出Excel清单,适合做周报、备份核查、日志审计。
场景痛点
月底要交周报,领导问"这周你改了哪些文件",你盯着资源管理器一脸懵。按修改时间排序只能在当前文件夹看,跨目录根本没法一起筛。用Python把整个工作目录扫一遍,按修改时间戳过滤,最近7天改过的文件一秒列出来,还能导出Excel,写周报直接抄。
用到的库
pip install openpyxl
核心用标准库 os、pathlib、datetime,导出用 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)即可。 - 扫大目录时加后缀过滤,不然会把日志、缓存文件全列出来。

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