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))
解析结果如下: