我有一个脚本,可以在其中浏览并解析大量 PDF。我注意到,当我尝试解析特定的 PDF 时,脚本会永远停止。但它不会抛出错误,而且据我所知,PDF 没有损坏。我不知道问题是什么,但我可以看到它发生在第 4 页。有没有办法找出导致此问题的原因,或者如果解析 PDF 的时间超过一分钟,则跳过该 PDF ?
from PyPDF2 import PdfReader
doc = "somefile.pdf"
doc_text = ""
try:
print(doc)
reader = PdfReader(doc)
for i in range(len(reader.pages)):
print(i)
page = reader.pages[i]
text = page.extract_text()
doc_text += text
except Exception as e:
print(f"The file failed due to error {e}:")
doc_text = ""
读者似乎发现很难检测到所有字符,因为它们无法清晰可读,最好的选择是忽略并继续前进,或者如果无法读取,则完全停止该过程。 您还可以尝试使用其他 pdf 阅读器,例如 pdfplumber 或 fitz(PyMuPDF)。
使用信号库编写一段代码来忽略停顿,允许读者在停顿时前进到下一页。
import signal
from PyPDF2 import PdfReader
def handler(signum, frame):
raise TimeoutError("Parsing page took too long.")
signal.signal(signal.SIGALRM, handler)
doc = "somefile.pdf"
doc_text = ""
try:
print(doc)
reader = PdfReader(doc)
for i in range(len(reader.pages)):
try:
print(f"Parsing page {i}")
signal.alarm(60)
page = reader.pages[i]
text = page.extract_text()
doc_text += text
signal.alarm(0)
except TimeoutError as e:
print(f"Page {i} skipped due to timeout: {e}")
continue
except Exception as e:
print(f"The file failed due to error {e}:")
doc_text = ""
signal.alarm(0)
尝试其中任何一个并告诉我。