Python之PDF提取表格数据

提取PDF文件中的表格数据是一个很常见的需求,为此我们经常付费,其实实现起来比较容易

这里使用camelot提取数据

import camelot
tables = camelot.read_pdf(pdf_filepath, pages='1-end')
for item in tables:
    df = item.df
    # item.to_csv('test.csv')
    # item.to_excel('test.xlsx')
  • pages使用'1-end'就可以读取pdf文件所有页
  • 这里将每个表格数据转换为pandas DataFrame(df)
  • 也可以直接导出CSV,Excel文件:to_csv,to_excel

但现实中我们的需求往往更复杂

实例需求:多个pdf文件,每个pdf可能有多页,要求提取指定列的所有数据,并去重,最终导出excel文件

import camelot
import glob
import openpyxl

# 导出excel文件
def write_excel_xlsx(path, sheet_name, value):
    index = len(value)
    workbook = openpyxl.Workbook()
    sheet = workbook.active
    sheet.title = sheet_name

    for i in range(0, index):
        sheet.cell(row=i+1, column=1, value=str(value[i]))

    workbook.save(path)
    print("xlsx格式表格写入数据成功!")

directory = './*.pdf'
files = [filename for filename in glob.glob(directory)]

result = []

for pdf_filepath in files:
    print(pdf_filepath)
    tables = camelot.read_pdf(pdf_filepath, pages='1-end')
    for item in tables:
        df = item.df
        try:
            # 这里取第6列数据
            itemData = df[5].to_list()
            result = result + itemData
            print(itemData)
        except Exception:
            print('异常')
# 过滤空白和标题数据
result = [x for x in result if x != '' and x != '标题名']
# 去重
result = list(set(result))
write_excel_xlsx('./result.xlsx', 'sheet1', result)
  • 使用glob遍历文件夹下所有pdf文件,批量处理
  • 使用camelot提取表格数据为pandas DataFrame
  • 取第6列数据,并过滤掉空白数据和标题数据,同时过滤重复数据
  • 使用openpyxl导出第6列数据到excel文件
posted @ 2021-05-28 06:14  shadowxs  阅读(747)  评论(0编辑  收藏  举报