前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >pdfplumber 模块读取PDF

pdfplumber 模块读取PDF

作者头像
用户6021899
发布2022-03-04 12:48:51
1.1K0
发布2022-03-04 12:48:51
举报
文章被收录于专栏:Python编程 pyqt matplotlib

pdfplumber可用于读PDF文件各页面的文本,之后我们用正则(re)解析之。

下面的例子是读取一份PDF格式的EDS报告。

代码语言:javascript
复制
import pdfplumber
#import pandas as pd
import re

# path = "EDS 2022W03.pdf"
# path = "EDS 2022W01.pdf"
path = "EDS 2022W02.pdf"
with pdfplumber.open(path) as pdf:
    page_count = len(pdf.pages)
    print(f"共 {page_count} 页")  # 得到页数
    samples = []
    for page in pdf.pages:
        #print(f"第{page.page_number}页")
        page_text = page.extract_text()  # 获取当前页面的全部文本信息,
        #print(page_text)
        #print(re.findall("谱图.*|Sample \d.*", page_text, re.S))
        a = re.findall("Sample .*Coating.*", page_text, re.S) # re.S代表可跨越换行符
        #print(a)
        for x in a:
            for x1 in re.findall(r"Sample +\d+.+?结果", x, re.S):  # 这里的?表示非贪婪模式 。\d匹配数字。\D匹配非数字
                #print(x1)
                print(re.findall(r"Sample +\d+", x1)[0], end="\t")
                x2 = re.findall("谱 ?图.*", x1)  # ? 指1或0次。.指任意字符。*指0次或n次。+指至少1次。
                #print(x2)
                elements = x2[0].strip().split('  ')[1:-1]
                elements = [element for element in elements if element]  # 去掉偶尔会出现的空字符串
                print("\t".join(elements))
                for i, spectrum in enumerate(x2[1:]):
                    print(f"谱图 {i+1}", end="\t")
                    #print(spectrum)
                    #spectrum = spectrum.replace('    ', '  ')  # 偶尔有4个空格,影响分割. Not in-place
                    ratios = spectrum.split('  ')
                    #print(ratios[0])
                    if ratios[0] == "谱图":
                        ratios = ratios[2:-1]  # 针对偶尔多一个空格的情况: "谱图  1"被'  '分割
                    else:
                        ratios = ratios[1:-1]  # 正常情况下是 "谱图 1",不会被'  '分割
                    #print(len(ratios) - len(elements))
                    ratios = [ratio.strip() for ratio in ratios]  # 去掉数字左边偶尔会出现的空格
                    ratios = ratios[len(ratios) - len(elements):] # 偶尔左边有4个空格,影响分割
                    print("\t".join(ratios))

解析结果如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档