pyPdf はこの例外をスローします:
pyPdf.utils.PdfReadError: EOF マーカーが見つかりません
pyPdf を修正する必要はありません。EOF エラーを取得して「except」ブロックを実行し、ファイルをスキップする必要があるだけですが、機能しません。それでもプログラムの実行が停止します。
バックグラウンド:
Python、pyPdf、Adobe PDF OCR エラー: サポートされていないフィルター /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")」行に行き詰まりましたが、サイコロはありません。
では、例外ブロックを実行するためにそのエラーを取得するにはどうすればよいですか? 私はwing IDEも使用しているため、デバッガーを使用してこれらのファイルをスキップする方法があれば、それも可能です。どうも。