You need to enable JavaScript to run this app. 遍历多文件夹提取PDF路径与表格数据合并为单个DataFrame求助
优惠活动
大模型
产品
解决方案
定价
更多

遍历多文件夹提取PDF路径与表格数据合并为单个DataFrame求助

调整方案

核心修改点

  • 循环外初始化空列表存储每个PDF对应的单行DataFrame,避免循环内反复拼接损耗性能
  • 新增PDF表格提取、最大值计算逻辑
  • 循环结束后统一用pd.concat合并所有数据,通过ignore_index=True重置行号,解决行号重复问题

完整可运行代码

import tabula
import pandas as pd
from pathlib import Path

# 存储所有PDF的处理结果
df_list = []
root_path = Path("C:\\Users\\Inspiron\\Desktop\\A\\1\\Biscuits and Crackers")

for path in root_path.glob('**/*.pdf'):
    path_in_str = str(path)
    print(f"正在处理:{path_in_str}")
    # 拆分路径获取分类字段
    file_split = path_in_str.split("\\")[6:12]
    # 生成分类字段的单行DataFrame
    df_meta = pd.DataFrame([file_split], columns=['Category','Brand','SKU','Type','Test','Direction'])
    
    # ------------------- 提取PDF表格最大值 -------------------
    table_max = None
    try:
        # 读取PDF所有页的所有表格,中文乱码可把encoding改为gbk
        tables = tabula.read_pdf(path_in_str, pages='all', multiple_tables=True, encoding='utf-8')
        all_numeric = []
        for tb in tables:
            # 仅保留数值型数据,排除文本、空值
            numeric_series = tb.apply(pd.to_numeric, errors='coerce').stack()
            all_numeric.extend(numeric_series.tolist())
        if all_numeric:
            table_max = max(all_numeric)
    except Exception as e:
        print(f"处理{path_in_str}表格失败:{str(e)}")
    # 把最大值加到当前行
    df_meta['Table_Max_Value'] = table_max
    # -------------------------------------------------------------
    
    # 把当前行加入结果列表
    df_list.append(df_meta)

# 合并所有数据,重置行号
final_df = pd.concat(df_list, ignore_index=True)
print(final_df)
# 如需导出到Excel可取消注释下行
# final_df.to_excel("PDF汇总结果.xlsx", index=False)

注意事项

  • 路径拆分的切片[6:12]请根据你实际的文件夹层级调整,确保取到的6个元素对应你要的6个分类字段
  • 如果PDF表格识别不准,可以给tabula.read_pdf加lattice=True参数,适合有明确边框的表格

内容的提问来源于stack exchange,提问作者Karthik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 11:54:02