Попытка извлечь текст из PDF дает мне эту ошибку: «TypeError: может только объединить str (не« NoneType ») в str»

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

          Traceback (most recent call last):
  File "D:/PDF_extract_1/main.py", line 35, in <module>
    extract_whole_pdf()
  File "D:/PDF_extract_1/main.py", line 26, in extract_whole_pdf
    final = final + "\n" + data
TypeError: can only concatenate str (not "NoneType") to str

Для справки, это код, который я использую при извлечении с отдельных страниц:

      def extract_first():
    pdf = pdfplumber.open("pdftest2.pdf")
    page = pdf.pages[6] #just for example, I chose page 5 of the PDF
    text = page.extract_text()

    print("First page data : {}".format(text))

    with open("pdf_pages.txt", "w", encoding='utf-8') as f:
        f.write(text)

    pdf.close()

и это код, который я использую для извлечения всего PDF:

      def extract_whole_pdf():
    pdf = pdfplumber.open("pdftest2.pdf")
    n = len(pdf.pages)

    final = ""
    for page in range(n):
        data = pdf.pages[page].extract_text()
        final = final + "\n" + data

    print("Whole document data : {}".format(final))

    with open("pdf_extract.txt", "w", encoding='utf-8') as f:
        f.write(final)

    pdf.close()

Я заметил, что этот вопрос задавали много, но, похоже, они не применимы к моей проблеме. В одном из вопросов была аналогичная ошибка, но это была другая ситуация, чем у меня.

1 ответ

Проблема, кажется, в методе extract_text() возвращение Noneкогда находит пустую страницу. Вы можете решить эту проблему, протестировав данные, возвращаемые перед объединением:

      def extract_whole_pdf():
    pdf = pdfplumber.open("pdftest2.pdf")
    n = len(pdf.pages)

    final = ""
    for page in range(n):
        data = pdf.pages[page].extract_text()
        if data:
            final = final + "\n" + data

    print(f"Whole document data : {final}")

    with open("pdf_extract.txt", "w", encoding='utf-8') as f:
        f.write(final)

    pdf.close()

В качестве примечания я также рекомендую использовать f-строки для форматирования строк, поскольку это последний стандарт.

Другие вопросы по тегам