python 数据处理

本文介绍了三种Python库——pdfminer、pypdf2和pdfplumber,用于将PDF文件转换为TXT文本。pdfminer适合处理两栏PDF,但不同版本函数调用和内容排列有差异;pypdf2能保持表格原本格式,处理表格数据更友好;pdfplumber按行转换,适合简单PDF。此外,还提到了pdf2docx库将PDF转为DOCX,以及使用正则表达式处理表格内容的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pdf转txt    三种方法,使用不同的包

1.pdfminer  按段转,可以实现那种两栏的pdf。 每页得到的x.get_text()是一个列表,把这一页的内容分割存储了。

需要注意,pdfminer版本不同,函数调用方式有差异,得到的每页的内容排列方式也不同。新版的pdfminer得到的表格数据都在一行,与汉字混合。老版的pdfminer提取出来的表格每个数据在一行(方便去除或者提取)

2.pypdf2  按段转,可以实现那种两栏的pdf。 每页得到的pageContext是一个大的字符串。表格数据按照表格原本的形式排列,对表格数据处理比较友好。

3.pdfplumber  按行转,对于复杂pdf效果不好

下面是三个包的代码展示

1.pdfminer 

参考(63条消息) 【最新实用版】Python批量将pdf文本提取并存储到txt文件中_sucka136的博客-优快云博客_python批量提取pdf中的信息

from pdfminer.pdfparser import PDFParser
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfpage import PDFTextExtractionNotAllowed
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import PDFPageAggregator
from pdfminer.layout import LAParams, LTTextBox
from io import StringIO
from io import open
from pdfminer.pdftypes import resolve1

def read(path):
    fp = open(path, 'rb')  # 以二进制读模式打开
    parser = PDFParser(fp)   # 用文件对象创建一个PDF文档分析器
    doc = PDFDocument(parser, '')  # 创建一个PDF文档
    parser.set_document(doc)  # 连接分析器,与文档对象
    pageNum=resolve1(doc.catalog['Pages'])['Count']

    # 检测文档是否提供txt转换,不提供就忽略
    if not doc.is_extractable:
        raise PDFTextExtractionNotAllowed
    else:
        # 创建PDf 资源管理器 来管理共享资源
        rsrcmgr = PDFResourceManager()
        # 创建一个PDF聚合器,包含资源管理器与参数分析器
        laparams = LAParams()
        device = PDFPageAggregator(rsrcmgr, laparams=laparams)
        # 创建一个PDF解释器对象
        interpreter = PDFPageInterpreter(rsrcmgr, device)

        # 循环遍历列表,每次处理一个page的内容   把page的内容读取出来,保存
        page0 = ''
        for i, page in enumerate(PDFPage.create_pages(doc)):
            """
            下面是对page的文本进行提取,写入到txt中
            """
            interpreter.process_page(page)          
            if page is not None:
                interpreter.process_page(page)    
            # 接受该页面的LTPage对象
            layout = device.get_result()
            # print(layout)
            # 这里layout是一个LTPage对象,里面存放着这个 page 解析出的各种对象
            # 包括 LTTextBox, LTFigure, LTImage, LTTextBoxHorizontal 等

            line0='\n\n'
            for x in layout:
                if isinstance(x, LTTextBox):
                    line0 = line0 + x.get_text().strip()

            page0 = page0 + line0
        return page0 #返回pdf文件中所有提取到的文本内容
if __name__ == '__main__':

    pdf_path = 
    txt_path = 

    content=read(pdf_path)
    with open(txt_path, 'w+', encoding='utf8') as f:
        f.write(content)

2.pypdf2

import os
import sys
import time
import importlib
import PyPDF2
from PyPDF2 import PdfFileWriter



def pdf2txt(pdf_path, txt_path):
    with open(pdf_path, 'rb') as pdf_file, open(txt_path, "w+", encoding='utf-8') as     txt_file:   # 以二进制读模式打开
        fileReader = PyPDF2.PdfFileReader(pdf_file)
        pdfFileWriter = PdfFileWriter()
        pageNum = fileReader.numPages
        content = ''
      
        for i in range(pageNum):
            pageObj = fileReader.getPage(i)
            pageText = pageObj.extractText()
         
            content = content +pageText + "\n"
        txt_file.write(content)

if __name__ == '__main__':
    pdf_path = xx
    txt_path =xx
    pdf2txt(pdf_path, txt_path)

3.pdfplumber 

参考(63条消息) 码力十足学量化|用Python将pdf文件转换为txt文件_码力十足学量化的博客-优快云博客_python pdf转txt

import pdfplumber


pdf_filename = xx
txt_filename = xx

pdf=pdfplumber.open(pdf_filename) # 打开PDF文件
pages=pdf.pages # 通过pages属性获取所有页的信息,此时pages是一个列表

text_all=[]
for page in pages:
    # 用extract_text()函数获取每页文本内容
    text=page.extract_text()
    text_all.append(text)


text_all="".join(text_all)
print(text_all)

# 将文件保存为txt文本格式
txt_file=open(txt_filename,mode='a',encoding='utf-8')
txt_file.write(text_all)
pdf.close()

pdf转word

from pdf2docx import Converter

pdf_file = xx
docx_file = xx

# convert pdf to docx
cv = Converter(pdf_file)
cv.convert(docx_file, start=0, end=None)
cv.close()

word转txt

参考(63条消息) python docx转换成txt文本_Gospel303的博客-优快云博客_python docx转txt

from win32com import client as wc

def Translate(input, output):
    # 转换
    wordapp = wc.Dispatch('Word.Application')
    doc = wordapp.Documents.Open(input)
    # 为了让python可以在后续操作中r方式读取txt和不产生乱码,参数为4
    doc.SaveAs(output, 4)
    doc.Close()


if __name__ == '__main__':
    input_file =xx
    output_file = xx
    Translate(input_file, output_file)

pdf去除表格

先用pypdf2将pdf转为txt

再用正则表达式去除跟表格有关的内容(需要找规律)

pdf得到表格

调用百度api识别表格 python+百度API识别图片中表格并保存到excel - 紫电_2021 - 博客园

可以用pypdf2转为txt,然后用re获取表格内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值