Python, ошибка распознавания pyPdf: pyPdf.utils.PdfReadError: маркер EOF не найден - PullRequest
2 голосов
/ 21 мая 2011

pyPdf выдает это исключение:

pyPdf.utils.PdfReadError: маркер EOF не найден

Мне не нужно исправлять pyPdf, мне просто нужно получить ошибку EOF, чтобы вызватьблок «кроме» для выполнения и пропуска файла, но он не работает.Это по-прежнему приводит к остановке работы программы.

Справочная информация:

Программа пакетного распознавания текста для PDF-файлов

Python, pyPdf, Adobe PDF OCRошибка: неподдерживаемый фильтр / lzwdecode

... сага продолжается.

Я получил 10000 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 не найден

Похоже, что это много (изgoogle):

http://pdfposter.origo.ethz.ch/node/31

Я думаю, это означает, что pyPdf открыл файл, попытался обработать текст, вызвал любое исключение, сделал исключение: блок, но теперь не можетперейдите к следующему шагу, поскольку он / она не знает, что файл был заполнен.

Существуют другие потоки, подобные этому, и они утверждают, что это было исправлено, но, похоже, это не так.

Тогда у кого-то есть функция, которая сначала записывает символ EOF в .pdf.

http://code.activestate.com/lists/python-list/589529/

Я застрял в строке "pdf.write (" %% EOF ")", чтобы попытаться имитировать это, но без кубиков.

Итак, как мне получить эту ошибку для запуска блока исключений?Я также использую wing IDE, поэтому, если есть способ использовать отладчик, чтобы просто пропустить эти файлы, это тоже возможно.Thx.

1 Ответ

2 голосов
/ 21 мая 2011

Поместите ваши вызовы pyPdf в блок try / Кроме того,

...