質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Adobe Analytics

Adobe Analyticsは、Adobe社が提供しているアクセス解析ツールです。Webサイトのアクセスログを集めて整理し、分析することが可能。高い自由度のあるカスタマイズ機能や多様なレポート機能が特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

0回答

180閲覧

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

MORO

総合スコア0

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Adobe Analytics

Adobe Analyticsは、Adobe社が提供しているアクセス解析ツールです。Webサイトのアクセスログを集めて整理し、分析することが可能。高い自由度のあるカスタマイズ機能や多様なレポート機能が特徴です。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2023/10/01 06:23

実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2023/10/01 08:24

> 元データがぐちゃぐちゃです。 規則性がない場合はかなり難しいかと思いますが、正規表現を使用すればある程度は自動化できるかと思います。正規表現の使い方を調べられてはいかがでしょうか?
MORO

2023/10/01 11:15

ありがとうございます。 やはり難しいですよね、、正規表現を見直してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問