(Python)PDFの内容を読み取り、csvに抽出したい。

実現したいこと

PDFの内容を読み取り、excelに抽出したい。

前提

言語はPythonを使用し、顧客からのPDFの見積書を読み取り、csvに抽出する機能を実装しています。

昨日の概要としては
①指定のディレクトリに見積書を複数格納し、PDFを読み込み、すべてCSVとして出力する。
②csvファイルをエクセルで取り込み、指定の項目のみ抽出したい。

発生している問題・エラーメッセージ

【問題】 CSVを出力した際に、ある2つの項目がカンマで区切られず、一つの項目として出力されてしまいます。 例:品番:123 品名:消しゴム⇒123消しゴム 数字と文字列で区切ることも考えたのですが、品番:123_仮 のように文字列とつながったものもあるなど 元データがぐちゃぐちゃです。 元データがきれいな場合は以下のソースコードで対応できると思うのですが、 元データがランダムな数字・文字列の中から任意の場所で区切るといった 規則性を見つけることができない場合において、解決策などがあれば教えていただきたいです。 現状、acrobat proからexcelで1ファイルずつ書き出し、特定の項目のみ手作業で抽出しか方法がありません。 ↑の処理を複数ファイル分実行する方法も調べましたが、これといったものがなかったのでご存じの方いらっしゃればお願いいたします。

該当のソースコード

Python

1import os 2import tabula 3import pandas as pd 4 5# 入力PDFファイルが存在するディレクトリのパスを修正6pdf_directory = "path"7 8# 出力CSVファイルのディレクトリパスを修正9output_directory = "path"10 11# ディレクトリ内のすべてのPDFファイルを処理12for pdf_file_name in os.listdir(pdf_directory):13 if pdf_file_name.endswith(".pdf"): # 拡張子が.pdfのファイルのみ処理14 pdf_file_path = os.path.join(pdf_directory, pdf_file_name)15 output_csv_name = os.path.splitext(pdf_file_name)[0] + ".csv" # 出力ファイル名を設定16 17 # PDFファイルから表形式のデータを抽出18 dfs = tabula.read_pdf(pdf_file_path, pages='all', encoding='utf-8')19 20 # リスト内のDataFrameを結合21 df = pd.concat(dfs, ignore_index=True)22 23 # 出力CSVファイルのパスを設定24 output_csv_path = os.path.join(output_directory, output_csv_name)25 26 # 抽出したデータをCSVファイルに保存27 df.to_csv(output_csv_path, index=False, encoding='utf-8-sig') # UTF-8 with BOMを使用して保存28 29 print(f"Table data extracted from {pdf_file_name} and saved to {output_csv_path}")30

試したこと

完成したcsvをexcelで開き、条件を指定しセルを分割しようとするも、
データによって分割する条件を絞れない。

補足情報(FW/ツールのバージョンなど)

python3.11

コメントを投稿

0 コメント