【发布时间】:2023-03-14 18:12:02
【问题描述】:
我正在编写一个脚本来获取扫描的 pdf 文件并将它们转换为文本行以输入数据库。我使用 re.findall 从正则表达式列表中获取匹配项,以从 tesseract 提取的字符串中获取某些值。当正则表达式找不到匹配项时,我遇到了麻烦,我希望它返回“错误”。所以我可以看出有问题。
我尝试了一些 if/else 语句,但我似乎无法注意到 None 值。
from wand.image import Image as Img
import ghostscript
from PIL import Image
import pytesseract
import re
import os
def get_text_from_pdf(pendingpdf,pendingimg):
with Img(filename=pendingpdf, resolution=300) as img:
img.compression_quality = 99
img.save(filename=pendingimg)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract'
extractedtext = pytesseract.image_to_string(Image.open(pendingimg))
os.unlink(pendingimg)
return extractedtext
def get_results(vendor,extracted_string,results):
for v in vendor:
pattern = re.compile(v)
for match in re.findall(pattern,extracted_string):
if type(match) is str:
results.append(match)
else:
results.append("Error")
return results
pendingpdf = r'J:\TBHscan07022019090315001.pdf'
pendingimg = 'Test1.jpg'
aggind = ["^(\w+)(?:.+)\n+3600",
"Ticket: (nonsensewordstothrowerror)",
"Ticket: \d+\s([0-9|/]+)",
"Product: (\w+.+)\n",
"Quantity: ([\d\.]+)",
"Truck (\w+)"]
vendor = aggind
extracted_string = get_text_from_pdf(pendingpdf,pendingimg)
results = []
print(get_results(vendor,get_text_from_pdf(pendingpdf,pendingimg),results))
【问题讨论】:
-
我要回去看看,但没有找到所有只返回匹配项?
-
您是否尝试过使用
try except块? -
@sahrudra 是正确的。它会比
if else更 Pythonic,但 OP 仍然需要知道何时抛出他的异常。 -
不需要
try except块,re.findall在没有匹配项时不会抛出异常。
标签: python regex string-search