PythonでPDF給与明細をデータ化 その2
久しぶりにPythonを使用する機会があったので、pdfminer.sixでpdfの表が読み込めずに撃沈していた給与明細のデータ化やります
前回は、pdfの文字を読みこもうとしていたのですが、 私の給与明細は明らかに表なので、今回はpdfの表を読みこむ方法を調べました
デデン! 「tabula」というキーワードがいっぱい出てきたのでこれを使います。 この記事に書かれてる感じで、私の表もデータ化したい qiita.com
ので、書かれている通りJavaをインストールします。 Javaの公式 https://www.java.com/ja/download/help/download_options_ja.html
オンラインインストールとオフラインインストールがあります。 特にオフラインでやる理由は無いのでオンラインでやります。 日本語でインストール方法書かれているので公式だけで完結する!うれしい!
ということでインストール完了
あとは、先程のQiitaの記事に書かれていた中からPDFを読みこんでくるこの数行を書けば
import pandas, tabula target_file = "給与明細.pdf" data_frames = tabula.read_pdf(target_file, lattice=True, pages='all') for data_flame in data_frames: print(data_flame) print('★')
給与明細なので、載せられませんが表単位でデータが取れてるみたいです。 漢字の文字化けもしてないし、これなら使えそうです。 間はスペースだから、このデータを分けていけばいけそう? 次はとってきたデータを加工して扱いやすいようにしたいと思います!
PythonでPDF給与明細をデータ化 その1
前回、PyhtonをVSCodeで実行できるように設定しました。
私がPythonに手を出した理由、それはPDFでしかダウンロードできない給与明細の計算がめんどくさいから!
CSVでくらい出してくれればいいのに、PDFなんだよ、なんなん!
という事で、給与明細に書かれていそうな「日本語(文章ではない)」「数字」が読み取れるライブラリ探しをします
テキストファイルじゃないデータの読み込みはしたことないので、どこまでぱっぱと出来るのか分かりませんが、表としても認識してくれるのでしょうか。
まあ、そこは後からいじればいいので、PDF読みこませてみたいと思います。
需給、ガイドライン、入荷及び価格の見通し等に関する情報:農林水産省
農林水産省の、令和4年2月の野菜生育表の表をお借りします。
あと、詳細は省きますが今回からターミナル実行じゃなくてジュピター使います
atmarkit.itmedia.co.jp
とりあえず、pdfminer.sixをインストールして、pdf読みこんでそのまま表示、、を試みましたが、農林水産省から借りてきた野菜の生育表からは何も読み取れませんでした。
コードを書くにあたって参考にさせてもらったサイトに書かれていたpdfファイルはちゃんと読みこんだので、pdfminerは表には向いてないかもしれない
self-development.info
pdfminer.sixではなく、開発停止しているらしい方を使用しているっぽいが、派生だと思うのでこれ以上の深堀はやめよう。
Pythonゼロ歳児ですし、私の給与計算だけに使うので、もう少し表の読み込みは簡単にできないのか!?と、、
まあ、最終的な調整で画像処理しなきゃいかんのかなーとはなんとなく思ってる。無駄にカラーだから。PDF給与明細(怨)
PDFの読み込みって、画像処理して読んでくれてると思ってるけどあってるのか?
んーー。読みこんだ文字列を力技で加工して欲しいデータを表示するぜ計画は難航。。
Pythonいれて、VSCodeで動かすよ
人から教えてもらったけど手元にメモが無いので、手探りで実行環境つくる!
OS: Windows10
VSCodeはインストール済。記憶ないけど、Pythonの拡張機能まではいってた。(なのにPythonインストールしてなかったのなぜ)
Pythonのインストール
公式のダウンロードからWindowsの最新ぽいやつをダウンロードする。
特にカスタマイズしたいことは現状無いので、Install Now!な方でインストール
終わると「disable path length limit」って聞いてくる画面が出てきたので、それをクリック。
パスが長いと、実行できない制限の解除らしい。私はフォルダの中に入れまくるので解除しておいた。
詳しいことは、disable~で検索すると沢山でてきます。
Pythonのインストールはおわり。
VSCodeで実行
エクスプローラで実行したいところにフォルダ作ります。
右クリックからVSCode開きます
フォルダ内に.pyの適当なファイルつくります
ターミナル起動して
このサイトを参考に仮想環境を作成します
> python -m venv .venv
pythonはPythonのexeがある場所
最後の.venvは自分の好きな名前でいいけど、venvが無難っぽい
さっき作ったpythonファイルの他に、.venvができてたら成功
左下の「Python 3.10.2~」をクリックする
画面上部にインタープリターを選択と表示されるので、★がついてる方を選択する。
(★はさっき作成した仮想環境)
ターミナルを開きなおせば実行ができ....ない!!!!
なんかエラー出た!!なんだこれ
& : このシステムではスクリプトの実行が無効になっているため、ファイル ***TestPython\.venv\Scripts\Activate.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。
仮想環境はPowerShellのスクリプト実行可能じゃないと動かないんですね~
Restricted × × × 全てのスクリプトが実行禁止。PowerShellまたはWindows OSインストール直後のデフォルト設定(Windows Server 2012 R2を除く)
今はこれですね。デフォルト設定。
引用させていただいたブログによると、RemoteSignedか、Bypassがよいとか。
RemoteSigned ○ ○ × ローカルに保存されているスクリプトは実行可能。インターネットからダウンロードしたスクリプト(非ローカルのスクリプト)は、署名されているもののみが実行可能。Windows Server 2012 R2では、この設定がデフォルト
Bypass ○ ○ ○ 警告やユーザーへの確認なしに、全てのスクリプトが実行可能
必要になったらBypassにするとして、今回はRemoteSignedにしようと思います。
パワーシェルを直で実行するわけじゃないので、Python実行毎に解除するのはあまりにも手間なので、全ユーザ一括変更の方で
1つ目の黄色い文字行が、仮想環境をつかって実行(venv内のPowerShellを実行)しようしてセキュリティポリシーに引っかかった
2つ目は、セキュリティポリシーの確認→全スクリプト実行不可
3つ目は、セキュリティポリシーを変更しようとして拒否された
4つ目は、オプションをつけて、3つ目にやろうとしたことをやって、無事セキュリティポリシー変更
5つ目で、再度セキュリティポリシーを確認して、変更されたことを確認
(この手順は全部、引用したブログに詳しく書いてあります。)
ターミナルを再度開きなおすと、やったー!venvで実行されました!やったね
これで、ここに好き放題ライブラリを投入できるぜ!!
> python ファイル名
ちゃんと表示されたね!今回の目的は果たせた!
(MarkDownとかで書けるんだね、、、コード書くなら今度からそうしよう)
ESETの更新
こんばんは
一年前にブログ更新して止まってますね
何もしてないです。。やっぱ作りたいもの明確にしないと続かねーです
それに、macのノートパソコン壊れたのか、充電器が壊れたのかウンともスンともいわないです
てことで実家にあった、デスクトップを持ってきました
でもセキュリティソフトが切れてる...!
という事で、更新しようと思ったのですが、今まで入っていたのが「5台を3年」のプランでして。。。
今そんな必要なくて、1台を3年で十分なので、Amazonでライセンスポチーして、ライセンス番号ゲットして、入力するだけだぜ!
なぜなら、ソフトはすでにインストールされているから!!
と思いきや、Amazonさんから教えてもらえるのは"購入コード"ってやつなんすよね
インストール済みのソフト内でも、web上でもいろんなページ見てみましたが、結局再インストールして、公式の手順通りに進めました
私が購入したのが「オンラインコード版」ってやつだから、、、(他のやつがどうかしらないけど、すぐに手に入れたかったから)
アンインストールを「アプリと機能」からしようと思ったらグレーアウトしてて一瞬案インストールできんのかと思ったしな(後から撮ったので日付は今日)
再インストールして、購入コードいれたらこの画面になる
購入コードが通れば、登録したメールアドレスに"製品認証キー"が届くので、あとはそれを使って正式にライセンス登録
あとはなんか頑張っているみたいなので放っておいてシャワーいってきます
たぶん3年後の私が同じ理由で「なんでできんのじゃー!」って言いだす