2

pyPdf はこの例外をスローします:

pyPdf.utils.PdfReadError: EOF マーカーが見つかりません

pyPdf を修正する必要はありません。EOF エラーを取得して「except」ブロックを実行し、ファイルをスキップする必要があるだけですが、機能しません。それでもプログラムの実行が停止します。

バックグラウンド:

PDF用バッチOCRプログラム

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も使用しているため、デバッガーを使用してこれらのファイルをスキップする方法があれば、それも可能です。どうも。

4

1 に答える 1

2

pyPdf 呼び出しも try/except ブロック内に配置します。

于 2011-05-21T04:36:51.350 に答える