如何使用glob打开指定数量Excel文件 提升concat合并文件效率
读取指定数量最新文件的实现方案
glob本身不支持直接按文件修改时间筛选、限制返回数量,你可以配合系统的文件修改时间属性实现需求,参考代码如下:
import glob import os import pandas as pd # 匹配目标路径下的所有Excel文件,可按需调整后缀匹配规则 all_excel = glob.glob("./excel_dir/*.xlsx") # 按文件最后修改时间倒序排列,最新文件排在最前 sorted_excel = sorted(all_excel, key=lambda f: os.path.getmtime(f), reverse=True) # 取最新的30份文件,可按需调整切片数值 latest_30_excel = sorted_excel[:30] # 合并文件 df_all = pd.concat([pd.read_excel(f) for f in latest_30_excel], ignore_index=True)
如果需要按文件创建时间筛选,把os.path.getmtime替换为os.path.getctime即可。
合并操作优化方案
- 按需读取指定列:读取Excel时通过
usecols参数指定需要的列,跳过无用列,可大幅降低读取耗时和内存占用,示例:pd.read_excel(file_path, usecols=["订单号", "金额", "日期"]) - 提前指定列类型:通过
dtype参数提前声明每列的数据类型,避免pandas自动推断列类型的额外耗时,同时可避免类型解析错误 - 使用适配的解析引擎:读取xlsx格式文件时指定
engine="openpyxl",读取xls格式指定engine="xlrd",读取xlsb格式指定engine="pyxlsb",适配的引擎可比默认配置提升30%以上的读取效率 - 增量写入避免内存占用:如果不需要在内存中保留全量合并后的DataFrame,可以边读取文件边以追加模式写入目标文件,无需将所有文件内容暂存在内存中,适合文件量极大的场景
- 过滤无效内容:通过
skiprows、skipfooter参数跳过重复表头、末尾空行等无效内容,减少无效数据的解析耗时
内容的提问来源于stack exchange,提问作者hoa tran
相关产品推荐
相关产品推荐

