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
相关产品推荐
相关产品推荐

