Поиск файлов с расширением pdf python

Обновлено: 29.06.2024

Эта статья является первой в серии статей по работе с PDF файлами на Python:

Формат документа PDF

Обработка PDF-документов

Для Linux доступны мощные инструменты командной строки, такие как pdftk и pdfgrep . Как разработчик, вы испытываете огромное волнение, создавая свое собственное программное обеспечение, основанное на Python и использующее библиотеки PDF, которые находятся в свободном доступе.

Эта статья является началом небольшой серии и будет посвящена этим полезным библиотекам Python. В первой части мы сосредоточимся на манипуляциях с существующими PDF-файлами. Вы научитесь читать и извлекать содержимое (как текст, так и изображения), поворачивать отдельные страницы и разбивать документы на отдельные страницы. Вторая часть будет посвящена добавлению водяного знака на основе наложений. Третья часть будет посвящена исключительно написанию/созданию PDF-файлов, а также удалению и повторному объединению отдельных страниц в новый документ.

Инструменты и библиотеки

Диапазон доступных решений для связанных с Python PDF-инструментов, модулей и библиотек немного сбивает с толку, и требуется некоторое время, чтобы понять, что есть что и какие проекты постоянно поддерживаются. Основываясь на наших исследованиях, это те кандидаты, которые являются актуальными:

PyPDF2 Чтение
PyMuPDF Чтение
pdflib Чтение
Таблицы PDF Чтение
табула-пи Чтение
табула-пи Чтение
Запрос PDF Чтение
pdfrw Чтение, Письмо/Создание
Reportlab Написание/Создание
Пикс Написание/Создание
PyFPDF Написание/Создание

Ниже мы сосредоточимся на PyPDF2 и PyMuPDF и объясним, как извлечь текст и изображения самым простым способом. Для того чтобы понять использование PyPDF2, нам помогло сочетание официальной документации и множества примеров, доступных из других ресурсов. В отличие от этого, официальная документация PyMuPDF гораздо понятнее и значительно быстрее использует библиотеку.

Извлечение текста с помощью PyPDF2

Листинг 1 сначала импортирует класс Pdf File Reader . Затем, используя этот класс, он открывает документ и извлекает информацию о документе с помощью метода getDocumentInfo () , количество страниц с помощью getDocumentInfo () и содержимое первой страницы.

Обратите внимание, что PyPDF2 начинает подсчет страниц с 0, и именно поэтому вызов pdf.getPage(0) извлекает первую страницу документа. В конце концов извлеченная информация печатается в stdout .

Листинг 1: Извлечение информации и содержимого документа.

Как показано на рисунке 1 выше, извлеченный текст печатается на постоянной основе. Нет ни абзацев, ни разделительных предложений. Как указано в документации PyPDF2, все текстовые данные возвращаются в том порядке, в каком они представлены в потоке контента страницы, и полагаться на них может привести к некоторым сюрпризам. Это в основном зависит от внутренней структуры PDF-документа и от того, как поток PDF-инструкций был создан процессом записи PDF.

Извлечение текста с помощью PyMuPDF

PyMuPDF доступен с веб-сайта PyPI, и вы устанавливаете пакет со следующей командой в терминале:

Отображение информации о документе, печать количества страниц и извлечение текста PDF-документа выполняются аналогично PyPDF2 (см. Листинг 2 ). Импортируемый модуль называется fitz и возвращается к предыдущему имени PyMuPDF.

Листинг 2: Извлечение содержимого из PDF-документа с помощью PyMuPDF.

Извлечение изображений из PDF-файлов с помощью PyMuPDF

PyMuPDF упрощает извлечение изображений из PDF-документов с помощью метода getPageImage List() . Листинг 3 основан на примере из вики-страницы PyMuPDF и извлекает и сохраняет все изображения из PDF-файлов в формате PNG постранично. Если изображение имеет цветовое пространство CMYK, то сначала оно будет преобразовано в RGB.

Листинг 3: Извлечение изображений.

Запустив этот скрипт Python на 400 страницах PDF, он извлек 117 изображений менее чем за 3 секунды, что удивительно. Отдельные изображения хранятся в формате PNG. Чтобы сохранить исходный формат и размер изображения, вместо преобразования в PNG, посмотрите расширенные версии скриптов в PyMuPDF wiki .

Разделение PDF-файлов на страницы с помощью PyPDF2

В этом примере сначала необходимо импортировать классы Pdf File Reader и PdfFileWriter . Затем мы открываем PDF-файл, создаем объект reader и перебираем все страницы с помощью метода объекта reader getNumPages .

Внутри цикла for мы создаем новый экземпляр PdfFileWriter , который пока не содержит никаких страниц. Затем мы добавляем текущую страницу в наш объект writer с помощью метода pdf Writer.addPage () . Этот метод принимает объект page, который мы получаем с помощью метода Pdf File Reader.getPage () .

Листинг 4: Разбиение PDF-файла на отдельные страницы.

Листинг 5: Поиск заданного текста.

Вывод

Методы, показанные здесь, довольно мощные. При сравнительно небольшом количестве строк кода легко получить результат. Другие варианты использования рассматриваются во второй части (скоро!) это касается добавления водяного знака в PDF-файл.

День добрый!
Как можно реализовать в Питоне поиск файла по маске, когда у нас есть, например начало название файла и расширение файла, а то что между ними - неважно. Думал с помощью glob и join, а оно мне ошибку бьёт!

Пример кода:
Имя искомого файла, например SFLU.2021-05-11_11-12-13.pdf

В бат-скриптах есть замечательный символ *, который очень просто в обращении, где * поставил, там и не учитывается. Есть ли альтернатива в Питоне? Команды Виндовс в коде использовать не хочу. __________________
Помощь в написании контрольных, курсовых и дипломных работ здесь

Как реализовать поиск по ключевым словам по письмам (именно по содержимому)
Нашел реализацию поиска писем по ключевым словам через библиотеку imap, но эти реализации ищут.

Фильтрация данных: поиск записей Vk по ключевым словам
Добрый день! Пишу скрипт поиска записей вк по ключевым словам.Столкнулся с проблемой, если наше.

Поиск по всем соцсетям постов по ключевым словам
Всем привет! Есть не хилое задание по веб поиску, хотелось бы услышать варианты умных людей как.


Поиск по ключевым словам и запись данных в файл (python)
Добрый день. Я начинающий кодер на python. Мне требуется помощь. Я пишу бота для Telegram, мне.


Поиск файла по ключевым словам
Всем привет! Нужно удалить все файлы в папке с ключевыми словами содержавшимися в названии файлов.

Поиск по ключевым словам
Здравствуйте! как сделать поиск файлов по ключевым словам? и чтобы эти ключевые слова читались из.

Поиск по ключевым словам
Вот сообственно поиск по ключевому слову через запросы sql,как организовать его вывод в на экран.

Поиск по ключевым словам
Я использую функцию if (_tcsstr(pBook->ptszWord, m_Find)=NULL) bFound = FALSE; .


Поиск по ключевым словам
Добрый день имеется лог файл, в который записывается все, что набиралось на клавиатуре. Допустим.

PyPDF2 – это библиотека Python для работы с файлами PDF. Мы можем использовать модуль PyPDF2 для работы с существующими файлами PDF, но мы не можем создать новый PDF-файл с помощью этого модуля.

Возможности PyPDF2

Некоторые из интересных особенностей модуля PyPDF2:

  • Метаданные PDF-файлов, такие как количество страниц, автор, создатель, время создания и последнего обновления.
  • Извлечение содержимого файла PDF постранично.
  • Объедините несколько файлов PDF.
  • Поворачивайте страницы PDF-файла на угол.
  • Масштабирование страниц PDF.
  • Извлечение изображений со страниц PDF и сохранение, как изображения с помощью библиотеки Pillow.

Установка модуля

Мы можем использовать PIP для установки модуля PyPDF2.

Примеры

Рассмотрим несколько примеров работы с файлами PDF с помощью модуля PyPDF2.

1. Извлечение метаданных PDF

Мы можем получить количество страниц в файле PDF. Мы также можем получить информацию об авторе PDF, приложении для создателя и датах создания.

2. Извлечение текста из PDF-страниц

  • Метод getPage (int) PdfFileReader возвращает экземпляр PyPDF2.pdf.PageObject.
  • Мы можем вызвать метод extractText() для объекта страницы, чтобы получить текстовое содержимое страницы.
  • ExtractText() не возвращает двоичных данных, таких как изображения.

3. Поворот страниц файла PDF

PyPDF2 допускает множество типов манипуляций, которые могут выполняться постранично. Мы можем повернуть страницу по часовой стрелке или против часовой стрелки на угол.

  • PdfFileWriter используется для записи файла PDF из исходного PDF.
  • Мы используем метод rotateClockwise (90), чтобы повернуть страницу по часовой стрелке на 90 градусов.
  • Мы добавляем повернутые страницы в экземпляр PdfFileWriter.
  • Наконец, для создания повернутого файла PDF используется метод write() класса PdfFileWriter.

4. Объединение файлов PDF

Приведенный выше код подходит для объединения файлов PDF, но он создал пустой PDF-файл. Причина в том, что исходные файлы PDF были закрыты до того, как произошла фактическая запись для создания объединенного файла PDF.

Это ошибка последней версии PyPDF2. Вы можете прочитать об этом в выпуске GitHub.

Существует альтернативный подход к использованию модуля contextlib, чтобы исходные файлы оставались открытыми до завершения операции записи.

5. Разделение PDF-файлов на одностраничные файлы

Python_Tutorial.pdf состоит из 2 страниц. Выходные файлы называются Python_Tutorial_0.pdf и Python_Tutorial_1.pdf.

6. Извлечение изображений

Мы можем использовать PyPDF2 вместе с Pillow (Python Imaging Library) для извлечения изображений со страниц PDF и сохранения их в виде файлов изображений.

Прежде всего, вам нужно будет установить модуль Pillow, используя следующую команду.

Вот простая программа для извлечения изображений с первой страницы файла PDF. Мы можем легко расширить его, чтобы извлечь все изображения из файла PDF.

В моем примере файла PDF на первой странице есть изображение PNG, и программа сохранила его с именем файла «image20.jpg».


Обработка PDF документов

Инструменты и библиотеки

Спектр доступных решений для связанных с Python инструментов, модулей и библиотек PDF немного сбивает с толку. Требуется время, чтобы понять, что к чему и какие проекты постоянно поддерживаются. Наше исследование позволило отобрать тех кандидатов, которые соответствуют современным требованиям:

В своём исследовании мы учитывали мнения Github-сообщества, а именно:

Читать это руководство, не прорабатывая приведённые в нём примеры, бессмысленно. Поэтому, вооружимся IDLE Python и воспользуемся менеджером пакетов pip или pip3 для установки PyPDF2 и PyMuPDF. Наберём в командной строке (Windows):

Извлечение текста с помощью PyPDF2

Сначала импортируем PdfFileReader , помня о том, что пакет уже установлен. Задаём имя файла из папки source (можете загрузить туда свой файл и поменять Computer-Vision-Resources.pdf в скрипте на имя загруженного файла), открывает документ и получаем информацию о документе, используя метод getDocumentInfo() и общее количество страниц getNumPages() . Далее в цикле for читаем каждую страницу, получаем содержимое page.extractText() и печатаем в stdout .

Обратите внимание, что PyPDF2 начинает считать страницы с 0, и поэтому вызов pdf.getPage(i) при i = 0 извлекает первую страницу документа.

Извлечение текста с помощью PyPDF2

Извлечение текста с помощью PyPDF2

Извлечение текста с помощью PyMuPDF

Перейдём к PyMuPDF.

Отображение информации о документе, печать количества страниц и извлечение текста из документа PDF выполняется аналогично PyPDF2 (см. скрипт ниже). Импортируемый модуль имеет имя fitz , что соответствует имени PyMuPDF в ранних версиях.

Извлечение текста с помощью PyMuPDF

Извлечение текста с помощью PyMuPDF

Извлечение изображений из PDF с помощью PyMuPDF

Переходим к изображениям. PyMuPDF упрощает извлечение изображений из документов PDF с использованием метода getPageImageList() . Скрипт, приведённый ниже, основан на примере из вики-страницы PyMuPDF и извлекает и постранично сохраняет все изображения из PDF в формате PNG. Если изображение имеет цветовое пространство CMYK, оно будет сначала преобразовано в RGB.

Извлечение изображений

Извлечение изображений

Этот скрипт Python извлёк 773 изображения на 400-страничном PDF, размером полгигабайта менее чем за 3 минуты, что удивительно. Отдельные изображения хранятся в формате PNG. Чтобы сохранить исходный формат и размер изображения вместо преобразования в PNG, взгляните на расширенные версии сценариев в вики PyMuPDF .

Для этого примера, в первую очередь необходимо импортировать классы PdfFileReader и PdfFileWriter . Затем мы открываем файл PDF, создаем объект для чтения и перебираем все страницы, используя метод объекта для чтения getNumPages .

Внутри цикла for мы создаем новый экземпляр PdfFileWriter , который еще не содержит страниц. Затем мы добавляем текущую страницу к нашему объекту записи, используя метод pdfWriter.addPage() . Этот метод принимает объект страницы, который мы получаем, используя метод PdfFileReader.getPage() .

Следующим шагом является создание уникального имени файла, что мы делаем, используя исходное имя файла плюс слово «page» плюс номер страницы. Мы добавляем 1 к текущему номеру страницы, потому что PyPDF2 считает номера страниц, начиная с нуля.

Наконец, мы открываем новое имя файла в режиме (режиме wb ) записи двоичного файла и используем метод write() класса pdfWriter для сохранения извлеченной страницы на диск.

Листинг 4: Разделение PDF на отдельные страницы.

Разделили исходный файл на страницы

Разделили исходный файл на страницы

Найти все страницы, где есть заданный текст

Результаты поиска COMPUTER VISION

Результаты поиска COMPUTER VISION

Методы, показанные здесь, довольно мощные. Сравнительно небольшое количество строк кода позволяет легко получить результат. Другие варианты применения рассматриваются во второй части, посвященной добавлению водяного знака и картинок в PDF.

Читайте также: