PDF - не самый удобный формат для передачи данных, но иногда возникает необходимость извлекать таблицы (или текст). Данный скрипт Python будет особенно полезен в случае, если вам необходимо периодически извлекать данные из однотипных PDF файлов.
Начнём с импорта библиотек, которые мы будем использовать - Pandas (для записи таблиц в CSV/Excel). Непосредственно работать с PDF файлами мы будем с помощью библиотеки tabula. (установка - cmd -> "pip install tabula-py" ; также для работы необходимо установить Java (https://www.java.com/en/download/))
import tabula
import pandas as pd
Задаём путь к файлу в формате PDF, из которого необходимо извлечь табличные данные:
pdf_in = "D:/Folder/File.pdf"
Извлекаем все таблицы из файла в переменную PDF в виде вложенных списков.
PDF = tabula.read_pdf(pdf_in, pages='all', multiple_tables=True)
pages='all' и multiple_tables=True - необязательные параметры
Далее прописываем пути к Excel/CSV файлам, которые мы хотим получить на выходе:
pdf_out_xlsx = "D:\Temp\From_PDF.xlsx"
pdf_out_csv = "D:\Temp\From_PDF.csv"
Для сохранения в .xlsx мы создаем датафрейм pandas из нашего вложенного списка и используем pandas.DataFrame.to_excel :
PDF = pd.DataFrame(PDF)
PDF.to_excel(pdf_out_xlsx,index=False)
Для сохранения в CSV мы можем использовать convert_into из tabula.
tabula.convert_into (input_PDF, pdf_out_csv, pages='all',multiple_tables=True)
print("Done")
Скрипт целиком:
# Script to export tables from PDF files
# Requirements:
# Pandas (cmd --> pip install pandas)
# Java (https://www.java.com/en/download/)
# Tabula (cmd --> pip install tabula-py)
# openpyxl (cmd --> pip install openpyxl) to export to Excel from pandas dataframe
import tabula
import pandas as pd
# Path to input PDF file
pdf_in = "D:/Folder/File.pdf" #Path to PDF
# pages and multiple_tables are optional attributes
# outputs df as list
PDF = tabula.read_pdf(pdf_in, pages='all', multiple_tables=True)
#View result
print ('\nTables from PDF file\n'+str(PDF))
#CSV and Excel save paths
pdf_out_xlsx = "D:\Temp\From_PDF.xlsx"
pdf_out_csv = "D:\Temp\From_PDF.csv"
# to Excel
PDF = pd.DataFrame(PDF)
PDF.to_excel(pdf_out_xlsx,index=False)
# to CSV
tabula.convert_into (input_PDF, pdf_out_csv, pages='all',multiple_tables=True)
print("Done")