5

Краткое руководство по извлечению таблиц из PDF с помощью Python

В работе с анализом данных мы часто сталкиваемся с необходимостью извлечения табличных данных из PDF-файлов. Однако прямое копирование таблиц из PDF часто приводит к хаосу в форматировании и смещению данных. Эта статья шаг за шагом покажет вам, как использовать библиотеку Free Spire.PDF for Python для быстрого и точного распознавания и извлечения таблиц из PDF, а также сохранения данных в распространённых форматах, таких как CSV и Excel.

1. Подготовка: Установка необходимых библиотек

Сначала вам нужно установить библиотеку Spire.PDF. Откройте терминал или командную строку и выполните следующую команду:

pip install spire.pdf.free

Если вы планируете экспортировать извлечённые данные в формат Excel, рекомендуется также установить pandas и openpyxl:

pip install pandas openpyxl

2. Основной код: Извлечение таблиц из PDF

Следующий код демонстрирует, как извлечь таблицы с первой страницы PDF и вывести содержимое ячеек построчно:

from spire.pdf import PdfDocument, PdfTableExtractor

# 1. Загрузить PDF-файл

pdf = PdfDocument()

pdf.LoadFromFile("sample.pdf")

# 2. Создать экстрактор таблиц

table_extractor = PdfTableExtractor(pdf)

# 3. Извлечь все таблицы с первой страницы

tables = table_extractor.ExtractTable(0)

# 4. Пройтись по каждой таблице

for table in tables:

row_count = table.GetRowCount()

column_count = table.GetColumnCount()

# Извлечь содержимое ячеек построчно

for i in range(row_count):

row_data = []

for j in range(column_count):

cell_text = table.GetText(i, j)

row_data.append(cell_text)

print(row_data)

Пояснение к коду

  • LoadFromFile(): Загружает PDF-файл из указанного пути

  • PdfTableExtractor(): Создаёт экземпляр экстрактора таблиц

  • ExtractTable(номер страницы): Извлекает все таблицы с указанной страницы, нумерация страниц начинается с 0

  • GetRowCount() / GetColumnCount(): Получает количество строк и столбцов таблицы

  • GetText(строка, столбец): Получает текстовое содержимое указанной ячейки

3. Расширенная обработка: Пакетное извлечение из многостраничного PDF

Если PDF содержит несколько страниц, вы можете использовать цикл для пакетного извлечения всех таблиц:

from spire.pdf import PdfDocument, PdfTableExtractor

pdf = PdfDocument()

pdf.LoadFromFile("multi_page_report.pdf")

# Пройтись по всем страницам

for page_index in range(pdf.Pages.Count):

extractor = PdfTableExtractor(pdf)

tables = extractor.ExtractTable(page_index)

print(f"\n=== Страница {page_index + 1} найдено {len(tables)} таблиц ===")

for t, table in enumerate(tables):

print(f"--- Таблица {t+1} ---")

rows = table.GetRowCount()

cols = table.GetColumnCount()

for i in range(rows):

row = [table.GetText(i, j) for j in range(cols)]

print(row)

4. Экспорт данных: Сохранение в файлы CSV или Excel

Извлечённые табличные данные можно легко преобразовать в другие форматы. Следующий пример сохраняет данные в CSV-файл:

import csv

from spire.pdf import PdfDocument, PdfTableExtractor

pdf = PdfDocument()

pdf.LoadFromFile("sample.pdf")

extractor = PdfTableExtractor(pdf)

tables = extractor.ExtractTable(0)

if tables:

table = tables[0]

rows = table.GetRowCount()

cols = table.GetColumnCount()

# Собрать все данные

data = []

for i in range(rows):

row_data = [table.GetText(i, j) for j in range(cols)]

data.append(row_data)

# Записать в CSV-файл

with open("output.csv", "w", newline="", encoding="utf-8") as f:

writer = csv.writer(f)

writer.writerows(data)

print(f"Успешно экспортировано {rows} строк × {cols} столбцов данных в output.csv")

Чтобы экспортировать данные в Excel-файл, вы можете использовать pandas:

import pandas as pd

# Предположим, что data — это извлечённый выше двумерный список

df = pd.DataFrame(data[1:], columns=data[0]) # Первая строка как заголовки столбцов

df.to_excel("output.xlsx", index=False)

print("Данные сохранены как output.xlsx")

5. Часто возникающие проблемы и советы

  1. Неполное распознавание таблицы? Проверьте, имеет ли таблица в PDF чёткие границы. Для отсканированных документов или PDF на основе изображений требуется технология OCR; Spire.PDF в основном подходит для текстовых PDF.

  2. Обработка объединённых ячеек: Spire.PDF автоматически обрабатывает объединённые ячейки. GetText() возвращает содержимое ячейки в верхнем левом углу объединённой области, а для остальных позиций возвращает пустую строку.

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

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

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества