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

Python&Pandas:使用pdfplumber提取PDF文本时如何合并多行到单个单元格

错误原因排查
  • 未关闭写入中的文件就直接读取:调用pd.read_csv时,file2还处于打开状态,操作系统的文件缓冲区内容未完全刷入磁盘,导致读取到的内容缺失最后一行。
  • 方法误用:pd.concat是用来拼接数据表结构的,无法实现多行文本合并为单个字符串的需求。
  • 参数错误:pd.read_csv传入的第二个参数'r'会被识别为分隔符参数,导致CSV读取解析错误,内容无法正常拆分。
  • 多余的字节编码:提取文本后直接执行encode('UTF-8')会将字符串转为字节对象,写入CSV后会显示为b'xxx'的格式,不是可读的普通文本。
最优实现方案

无需生成中间文件,直接在提取文本的过程中拼接所有页内容,效率更高:

import pdfplumber
import csv

# 初始化全文字符串
full_text = ""
with pdfplumber.open('target.pdf') as pdf:
    for page in pdf.pages:
        page_text = page.extract_text()
        # 跳过无文本的空白页
        if page_text:
            # 可自定义页之间的分隔符,此处用两个换行分隔
            full_text += page_text + "\n\n"

# 直接写入单个CSV单元格
with open("pdf_texts.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    # 写入表头
    writer.writerow(["text"])
    # 单个单元格写入全部文本
    writer.writerow([full_text])
原有逻辑修正方案

如果需要保留生成每页文本临时文件的逻辑,修正后的代码如下:

import pdfplumber
import pandas as pd
import csv

# 先写入每页文本到临时文件,完成后主动关闭文件
with open("pdf_text_pgs.csv", "w", newline="", encoding="utf-8") as file2:
    writer2 = csv.writer(file2)
    writer2.writerow(['text'])
    with pdfplumber.open('target.pdf') as pdf:
        for page in pdf.pages:
            pdf_txt = page.extract_text()
            if pdf_txt:
                writer2.writerow([pdf_txt])

# 读取临时文件后合并所有文本
df = pd.read_csv("pdf_text_pgs.csv")
# 用两个换行作为每页文本的分隔符
full_text = df['text'].str.cat(sep='\n\n')
# 写入最终文件
pd.DataFrame([full_text], columns=['text']).to_csv('pdf_texts.csv', index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 16:06:10