pdfplumber 模块读取PDF

2022-03-04 12:48:51 浏览数 (1)

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))

解析结果如下:

pdf

0 人点赞