Как на 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-файлов с минимальным количеством кода.
