如何在Python中基于修改日期加载最近30天的Excel文件
筛选最近30天Excel文件并检查重复的解决方案
核心思路
- 计算30天前的时间阈值,用于判断文件修改时间是否符合要求
- 仅筛选
.xlsx格式文件,避免处理无关文件 - 直接使用完整文件路径操作,无需频繁切换目录
- 用
pd.concat()替代已弃用的df.append()合并数据
完整代码示例
import os import pandas as pd import time # 替换为你的目标文件路径 search_dir = "path/to/your/excel/files" # 计算30天前的时间戳(单位:秒) thirty_days_ago = time.time() - 30 * 24 * 3600 # 初始化空DataFrame用于存储合并后的数据 merged_df = pd.DataFrame() # 遍历目录,筛选符合条件的文件 for filename in os.listdir(search_dir): # 仅处理xlsx文件(兼容大小写后缀) if filename.lower().endswith(".xlsx"): file_full_path = os.path.join(search_dir, filename) # 确认是文件而非子目录 if os.path.isfile(file_full_path): file_mtime = os.path.getmtime(file_full_path) # 判断文件修改时间是否在最近30天内 if file_mtime >= thirty_days_ago: # 读取指定工作表 sheet_data = pd.read_excel(file_full_path, sheet_name='Deal') # 合并数据到总DataFrame merged_df = pd.concat([merged_df, sheet_data], ignore_index=True) # 检查重复数据的示例代码 # 标记重复行 merged_df['is_duplicate'] = merged_df.duplicated() # 统计重复数量 print(f"重复条目总数:{merged_df['is_duplicate'].sum()}") # 查看所有重复内容 # print(merged_df[merged_df['is_duplicate']])
可选:按修改时间排序后处理
如果需要按文件修改时间顺序处理,可先收集符合条件的文件再排序:
# 收集符合条件的文件(存储修改时间和完整路径) valid_files = [] for filename in os.listdir(search_dir): if filename.lower().endswith(".xlsx"): file_full_path = os.path.join(search_dir, filename) if os.path.isfile(file_full_path): file_mtime = os.path.getmtime(file_full_path) if file_mtime >= thirty_days_ago: valid_files.append((file_mtime, file_full_path)) # 按修改时间升序排序(从旧到新),reverse=True则为从新到旧 valid_files.sort(key=lambda x: x[0]) # 遍历排序后的文件 for mtime, file_path in valid_files: sheet_data = pd.read_excel(file_path, sheet_name='Deal') merged_df = pd.concat([merged_df, sheet_data], ignore_index=True)
关键说明
- 使用
time.time()获取当前时间戳,与os.path.getmtime()返回的文件修改时间戳直接比较,逻辑更简洁 - 加入
filename.lower()避免因大小写后缀(如.XLSX)漏判文件 ignore_index=True确保合并后DataFrame的索引连续,避免索引冲突pd.concat()是Pandas官方推荐的合并数据方式,替代已被标记为弃用的df.append()
内容的提问来源于stack exchange,提问作者Bamalam
相关产品推荐
相关产品推荐

