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

调用splitlines()构建Pandas DataFrame报list无该属性错误

问题根因

报错的核心原因是类型不匹配:

  • 之前使用的result.content是Azure Form Recognizer返回的全文档拼接完成的字符串类型,因此可以直接调用字符串自带的splitlines()方法做按行拆分。
  • 你现在赋值的result.pages是DocumentPage对象构成的列表,每个元素对应PDF的单页识别结果,列表类型本身没有splitlines()方法,直接调用就会抛出你看到的AttributeError。

另外你原有代码还有一个逻辑问题:myoutput = result.pages写在了遍历blob的for循环外部,就算不报错,最终也只会拿到容器中最后一个文件的识别结果,前面所有文件的处理结果都会被覆盖。

解决方案

根据你的实际需求二选一即可:

方案1:仅需按行提取全文档纯文本,和原有逻辑对齐

不需要切换到result.pages,直接基于result.content做拆分即可,同时修正循环变量作用域问题:

import pandas as pd
from azure.ai.formrecognizer import DocumentAnalysisClient, AzureKeyCredential

document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)

for blob in container.list_blobs():
  blob_url = container_url + "/" + blob.name
  poller = document_analysis_client.begin_analyze_document_from_url(
            "prebuilt-read", blob_url)
  result = poller.result()
  print("Scanning " + blob.name + "...")
  
  # 直接对全文档字符串做按行拆分,DataFrame赋值放在循环内部
  df_data = pd.DataFrame({'RAWTEXT': result.content.splitlines()})
  # 此处追加你的df存储、后续处理逻辑,避免循环覆盖结果

方案2:需要保留页码、所属文件等元信息

如果你需要区分每行文本属于哪一页、哪个文件,就遍历result.pages提取结构化内容,这种方式比直接用splitlines()拆分准确率更高,因为page.lines是服务端已经识别完成的标准文本行结果,不会受换行符识别误差影响:

import pandas as pd
from azure.ai.formrecognizer import DocumentAnalysisClient, AzureKeyCredential

document_analysis_client = DocumentAnalysisClient(
endpoint=endpoint, credential=AzureKeyCredential(key)
)

all_text_rows = []
for blob in container.list_blobs():
  blob_url = container_url + "/" + blob.name
  poller = document_analysis_client.begin_analyze_document_from_url(
            "prebuilt-read", blob_url)
  result = poller.result()
  print("Scanning " + blob.name + "...")
  
  # 逐页提取文本行
  for page_idx, page in enumerate(result.pages, start=1):
    for line in page.lines:
      all_text_rows.append({
        "RAWTEXT": line.content,
        "PAGE_NUMBER": page_idx,
        "SOURCE_FILE": blob.name
      })

# 所有文件处理完成后统一生成DataFrame
df_data = pd.DataFrame(all_text_rows)

如果需要提取单字、表格、识别置信度、文本坐标等更细粒度的信息,也可以在遍历page、line的过程中从对应属性里取值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:22:03