【发布时间】:2011-05-21 04:28:45
【问题描述】:
pyPdf 抛出此异常:
pyPdf.utils.PdfReadError: EOF 标记未找到
我不需要修复 pyPdf,我只需要获取 EOF 错误以导致“except”块执行并跳过文件,但它不起作用。它仍然会导致程序停止运行。
背景:
Python, pyPdf, Adobe PDF OCR error: unsupported filter /lzwdecode
...传奇还在继续。
我在一个文件夹中有 10,000 个 pdf。一些 OCRd,一些没有。无法区分它们。第 1 步是找出哪些不是 OCRd,而 OCR 只是那些(有关详细信息,请参阅其他线程)。
所以我正在使用 pyPdf。当我尝试阅读文本时,我得到了一些与无法识别的字符和不受支持的过滤器相关的异常。所以我猜测如果它抛出异常,它会在其中包含一些文本,然后它不会出现在列表中。问题解决了,对吧?像这样:
from pyPdf import PdfFileWriter, PdfFileReader
import sys, os, pyPdf, re
path = 'C:\Users\Homer\Documents\My Pdfs'
filelist = os.listdir(path)
has_text_list = []
does_not_have_text_list = []
for pdf_name in filelist:
pdf_file_with_directory = os.path.join(path, pdf_name)
pdf = pyPdf.PdfFileReader(open(pdf_file_with_directory, 'rb'))
print pdf_name
for i in range(0, pdf.getNumPages()):
try:
pdf.write("%%EOF")
content = pdf.getPage(i).extractText()
does_it_have_text = re.findall(r'\w{2,}', content)
if does_it_have_text == []:
does_not_have_text_list.append(pdf_name)
print pdf_name
else:
has_text_list.append(pdf_name)
except:
has_text_list.append(pdf_name)
print does_not_have_text_list
然后我得到这个错误:
pyPdf.utils.PdfReadError: EOF 标记未找到
似乎出现了很多(来自谷歌):
http://pdfposter.origo.ethz.ch/node/31
我认为这意味着 pyPdf 打开了文件,尝试了文本处理,引发了任何异常,做了 except: 块,但现在无法进入下一步 b/c 它不知道文件已结束。
还有其他类似的帖子,他们声称已修复,但似乎没有。
然后有人在这里有一个函数,他们首先将 EOF 字符写入 .pdf。
http://code.activestate.com/lists/python-list/589529/
我停留在“pdf.write("%%EOF")" 行试图模仿这个,但没有骰子。
那么我如何得到那个错误来运行 except 块?我也在使用wing IDE,所以如果有办法使用调试器跳过这些文件,那也是可能的。谢谢。
【问题讨论】:
-
当 EOF 存在但不是最后一行时,我有一个可行的解决方案,因为在 EOF 之后添加了 javascript。 stackoverflow.com/a/66058416/5697539
标签: python exception eof pypdf