Как на Python написать скрипт для автоматического парсинга таблицы из PDF-файла и сохранения её в формате CSV (библиотека tabula-py)?

## Парсинг таблиц из PDF в CSV с помощью tabula-py

### Установка зависимостей

Перед началом работы необходимо установить библиотеку `tabula-py`, а также убедиться, что в системе установлена Java (tabula-py использует Java под капотом):

pip install tabula-py

Если Java не установлена, скачайте JDK с официального сайта Oracle или используйте OpenJDK.

### Базовый скрипт парсинга

Ниже приведён полный рабочий скрипт, который читает таблицу из PDF и сохраняет её в CSV:

python
import tabula
import pandas as pd

# Путь к исходному PDF-файлу
pdf_path = «input.pdf»

# Путь для сохранения результата
csv_path = «output.csv»

# Читаем все таблицы со всех страниц PDF
# Параметр pages=’all’ — обрабатывать все страницы
# lattice=True — подходит для таблиц с явными границами
# stream=True — для таблиц без видимых линий
tables = tabula.read_pdf(
pdf_path,
pages=’all’,
multiple_tables=True,
lattice=True
)

# Если таблиц несколько — объединяем их в один DataFrame
if tables:
combined_df = pd.concat(tables, ignore_index=True)

# Сохраняем в CSV
combined_df.to_csv(csv_path, index=False, encoding=’utf-8-sig’)
print(f»Готово! Таблица сохранена в {csv_path}»)
print(f»Строк: {len(combined_df)}, Столбцов: {len(combined_df.columns)}»)
else:
print(«Таблицы в PDF не найдены.»)

### Прямое сохранение без pandas

tabula-py позволяет сохранить CSV напрямую, без промежуточного DataFrame:

python
import tabula

tabula.convert_into(
«input.pdf»,
«output.csv»,
output_format=»csv»,
pages=’all’
)

### Пример одной строки результирующего CSV

Предположим, PDF содержит таблицу с данными о сотрудниках. Итоговый CSV будет выглядеть так:

Имя,Отдел,Должность,Оклад,Дата найма
Иванов Иван,Разработка,Senior Python Developer,180000,2021-03-15

Первая строка — заголовки столбцов, вторая — пример данных.

### Полезные параметры read_pdf

| Параметр | Описание |
|—|—|
| `pages=’1’` | Только первая страница |
| `pages=’1,3’` | Страницы 1 и 3 |
| `area=[top, left, bottom, right]` | Координаты области таблицы |
| `lattice=True` | Таблицы с линиями |
| `stream=True` | Таблицы без линий |
| `pandas_options={‘header’: None}` | Без строки заголовка |

### Частые проблемы и решения

— **Java not found** — установите JDK и добавьте путь в переменную PATH.
— **Кривая кодировка** — используйте `encoding=’utf-8-sig’` при сохранении.
— **Таблица не распознаётся** — попробуйте переключиться между `lattice=True` и `stream=True`.
— **Объединённые ячейки** — tabula плохо справляется с merged cells, потребуется постобработка через pandas.

Таким образом, tabula-py — это мощный и простой инструмент для автоматизации извлечения табличных данных из PDF-файлов с минимальным количеством кода.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.