求助:基于Pandas按日期分组整理Markdown文件修改时间
我来帮你搞定这个按日期分组排序的需求!咱们一步步来解决:
首先先修正你现有代码里的小问题——你用到了os和time模块但没导入,先补上。接下来我们要对Pandas数据做几步处理,最终生成你想要的Markdown格式输出。
完整解决方案代码
import pandas as pd from datetime import datetime as dt from pathlib import Path from dateutil import parser import os import time File_vault = "any folder path" # 替换成你的实际文件夹路径 File_ext = "*.md" List_names = [] List_dates = [] # 递归遍历所有Markdown文件 for file in Path(File_vault).rglob(File_ext): file_stamp = os.path.getctime(file) # 用splitext更稳妥地去除文件后缀(避免原replace方式的匹配问题) List_names.append(os.path.splitext(file.name)[0]) List_dates.append(parser.parse(time.ctime(file_stamp))) # 转换为DataFrame df = pd.DataFrame({ 'datetime': List_dates, 'file': List_names }) # 1. 添加辅助列:提取日期、格式化时间、星期几 df['date'] = df['datetime'].dt.date # 仅保留日期部分,作为分组依据 df['time'] = df['datetime'].dt.strftime('%H:%M') # 格式化为HH:MM样式 df['weekday'] = df['datetime'].dt.strftime('%A') # 提取星期几的英文名称 # 2. 按datetime从新到旧整体排序,确保分组后条目顺序正确 df = df.sort_values('datetime', ascending=False) # 3. 按日期分组,生成目标Markdown内容 markdown_output = "" for date_val, group in df.groupby('date'): # 格式化日期标题:比如26.7 (Sunday) date_str = date_val.strftime('%d.%m') weekday_str = group['weekday'].iloc[0] markdown_output += f"## {date_str} ({weekday_str})\n" # 遍历组内条目,添加时间和文件名 for _, row in group.iterrows(): markdown_output += f"{row['time']} | {row['file']}\n" markdown_output += "\n" # 组与组之间空一行分隔 # 打印结果,也可以保存到文件 print(markdown_output)
代码说明
- 修正初始代码:补上缺失的
os和time导入,改用os.path.splitext处理文件名后缀,避免原replace方法可能出现的匹配错误。 - 添加辅助列:
date:提取datetime的纯日期部分,作为分组的核心键;time:把时间格式化为HH:MM,完全匹配你想要的输出样式;weekday:提取星期几的名称,用于标题显示。
- 整体排序:先对整个DataFrame按
datetime降序排列,这样分组后每个日期下的条目自然是从新到旧的顺序。 - 分组生成Markdown:遍历每个日期分组,先生成带星期的日期标题,再逐个添加组内的时间与文件名条目。
输出效果
运行后会生成你期望的格式:
## 26.07 (Sunday) 13:33 | File1 10:15 | File2 ## 25.07 (Saturday) 22:30 | File3 10:34 | File5 10:01 | File4
如果需要把结果保存到文件,只需在最后添加:
with open('file_summary.md', 'w', encoding='utf-8') as f: f.write(markdown_output)
内容的提问来源于stack exchange,提问作者dxc




