今日からしばらくは 「ズボラなpython野郎のライブラリー利用」を書く
第1回はcsvのデータからsqliteのテーブルを少ない手数で作る方法を示す。
例えば顧客マスターのデータをある程度の数を用意してプログラムの開発をしたいときにちまちまと手入力するのはつらい。
で、そんなときにお世話になるのが「なんちゃって個人情報」さん。
とりあえずこちらで適当に項目を取捨選択して5000件のcsvを用意した。
次はpythonでこのcsvファイルをsqliteのテーブルデータに変換したいのだけど前処理として2つやるべきことがある。
- 「なんちゃって生成」のボタンを押して落ちてくるデータの名前がdummy.cgiなので拡張子をcsvに変えておく
おいらは「Dummy個人情報5000.csv」とした。 - 落ちてきたファイルの文字コードがwindows向けにshift-jisなのでutf-8に変えておく。方法はlinuxな方たちはnkfとか使うのかもしれないけどコマンドのパラメータの渡し方を調べるのが面倒だったのでvscodeで読み込んで全行を選んでencodeをutf-8に変えてから貼り直して保存してやりました。
いよいよpythonの登場。
この時の前準備はpandasをpythonのライブラリーに追加しておくこと。
準備ができたらcsvを保存したフォルダでpythonを対話モードで起動して下記の操作をする。
import pandas as pd
import sqlite3
df=pd.read_csv("Dummy個人情報5000.csv")
with sqlite3.connect("test.sqlite") as conn:
df.to_sql("personal",conn)
以上で完了
参考(丸パクリ)にしたサイト
- https://note.nkmk.me/python-pandas-read-csv-tsv/
- https://happy-analysis.com/python/python-topic-pandas-sqlite3.html
上記の操作でcsvと同フォルダにtest.sqliteというファイルが作成される。
DB Browser for SQLite などで中を見るとpersonalというテーブルにcsvの1行目のヘッダ情報を項目名として読み込まれていることが確認できる。めでたし。
次はpythonのsqlite3ライブラリーでいろいろ読み込んでみよう。
pythonの対話形式でやるとまずは
import sqlite3
conn = sqlite3.connect("test.sqlite")
cur = conn.cursor()
cur.execute("select * from personal")
print(cur.fetchall())
cur.close()
conn.close()
まででpersonテーブルの全レコードが画面に出るけどまあ見えない。(多過ぎ)
cur.executeの中身を"select 性別, count(氏名) as 人数 from personal group by 性別" とかにすると
print(cur.fetchall())で
[('女', 2456), ('男', 2544)]
のような結果を得ることが出来た。select結果はfetchでタプルのlistになるようだ。
cur.executeの中身はcrudなら何でも通るのでinsert,update,deleteも使って自由にテーブルの中を操作できるしselect でデータレコドを抽出することも楽勝。
しかし素のsql文を毎回書くのは怠い。
pythonには「orm」つまりテーブルの操作をオブジェクトの操作として記述できるライブラリーが複数存在するので次回はその点を掘る。