You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python提取PDF数据时for循环append无法将字体名归入同个子列表

代码修复方案

错误原因

  • 原有代码对LTTextContainer做了两次独立判断,第一次判断后追加[字号,文本]子列表,第二次判断后单独追加字体名字符串,导致两个属性被拆成两个独立元素存入列表
  • 你之前使用extend出错是因为extend会迭代传入的容器,把每个元素单独加入列表,追加完整子列表应该用append方法。

修复后代码

list1 = []
for page in pages:
    for lobj in element:
        if isinstance(lobj, LTTextBox):
            x, y, text = lobj.bbox[0], lobj.bbox[3], lobj.get_text()
            
        if isinstance(lobj, LTTextContainer):
            Font_size = None
            font_name = None
            # 单次遍历同时获取字号和字体名
            for text_line in lobj:
                for character in text_line:
                    if isinstance(character, LTChar):
                        # 同一段文本格式统一,取第一个字符的属性即可
                        if Font_size is None:
                            Font_size = character.size
                        if font_name is None:
                            font_name = character.fontname
            # 三个属性拼成一个子列表一次性追加
            if Font_size and font_name:
                list1.append([Font_size, lobj.get_text(), font_name])

print(list1)

优化点

  • 无需创建额外列表再做zip合并,单个列表即可直接生成目标结构
  • 合并了重复的遍历逻辑,减少不必要的计算开销
  • 增加了空值判断,避免无字符的文本容器导致变量未定义报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:48:02