pdfをcsvに変換

csvファイルを読み込んで、ファイル名を変更後csvファイルとして保存できるようになったのでPDFファイル(表)をcsvに変換することに挑戦する。
で、pdfをcsvに変換するために「python pdf csv」でググってみる。。。
ふんふん、「tabula-py」というライブラリを使用すると実現できるらしい。
tabula-pyでPDFファイルを読み込んでpandasでデータフレームに入れ込む考え方らしい。
で、早速、tabula-pyをインストールする。
自分のPythonはAnacondaなのでANACONDA CLOUDからtabula-pyのライブラリを検索して「conda install -c ・・・」をコピーして、Windows PowerShellに貼り付けてエンターキーを押す。ああ、なんて楽なんだ。。。
csv読み込み書き込みコードを変更してできたのが以下のコード。
# ファイル読み取りダイアログ(Tkinter)を表示するのに必要なライブラリ。 from tkinter import filedialog #pdfからcsvに変換に必要なライブラリ。 from tabula import wrapper # csv読み書きに必要なライブラリ。 import pandas as pd # ファイルパス取得に必要なライブラリ。 import os # csvフィルをGUIで読み取る。 # ---Tkinterここから--- type = [('pdfファイル', '*.pdf')] path = 'C:' file_path = filedialog.askopenfilename(filetypes=type, initialdir=path) # ---Tkinterここまで--- #pdfデータ(表)をデータフレームに入れる。日本語を変換するためSHIFF-JISを指定している。 df = pd.DataFrame() tmp = wrapper.read_pdf(file_path, encoding='SHIFT-JIS', spreadsheet=True) df = pd.concat([df, tmp]) # ファイルのパスの拡張子を分離する(あとでファイル名を変更するため)。 print(file_path) # 拡張子まで含めたファイルパスを確認。 file_path_name = os.path.splitext(file_path)[0] # 拡張子を分離したファイルパスを取得。 print(file_path_name) # 拡張子なしファイルパスを確認。 # ファイル名を変更する。 new_file_path = file_path_name + '_a' + '.csv' # ファイル名に'_a'を追記して拡張子を付加する。 print(new_file_path) # "a"を追記したファイルパスを確認する。 # pandasでcsvファイルを書き込む。行番号を削除を削除するためにindex=Falseとしている。 df.to_csv(new_file_path, index=False, encoding='SHIFT-JIS')
csv読み込み書き込みコードからの変更点はtabula-pyをimportしている点とpdfデータ(表)をデータフレームに入れる箇所のみ。
あと、csv読み込み書き込みではやたらとprint文で状況を確認していたけど、今回はそれをなくした。なので、相当スッキリしたと思う。
今回も上記コードになるのに相当時間がかかった。理由は以下の2点。
1.エラーが出る。
2.複数ページを変換できない。
1.エラーが出る
上記コードを実行すると「opentype layout tables used in font are not implemented in pdfbox and will be ignored」と「 Format 14 cmap table is not supported and will be ignored」というエラーが出る。前者はどうも、日本語を使用しているために出るエラーっぽい。後者は何が原因で出るのか不明である。
2.複数ページを変換できない。
参考にしたサイトには複数ページも結合できる旨が記述されていたが、表の形が崩れ、うまく結合できなかった。これを解決しようとして相当時間をかけたが、今は諦めた。今よりもPythonの知識/技術が向上したら修正可能と信じて今は単ページの変換でよしとすることにした。
注意事項:tabula-pyは表の罫線をものすごく意識しているようで、罫線のないpdfファイルは変換してくれません。また、罫線からはみ出た文字はなかったことにされます。
-
前の記事
Pythonコードをexe化してみる 2019.07.21
-
次の記事
tar.gz一括解凍(展開)からのcsv一括チェック 2019.11.08