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文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM