pytnon csvデータからsqliteのデータベースにデータ登録する。

やりたいこと

音声入力したものを直接データベースに登録したかったが、マイクをもってないのと、おそらく精度の問題等々が発生するのではないかと思った。音声入力はpythonのSpeechRecognitionでマイクの音声をテキストにするする方法があるが、なんらかの形でデータのチェックが必要になると思う。それをプログラムでやるのはうーん・・・という感じだったので別の方法を探ることにした。

案。

  • スマホのグーグル音声入力を使う: GoogleKeepがよさげか・・・
  • GoogleKeepで音声入力したデータをcsvファイルにする: 拡張子.csvのファイルを作成
  • pythonで半角スペースをカンマに変換しcsvの形式にする
  • pythonでcsvをとりあつかい行をタプルにする
  • タプルにすることでデータベーステーブルに複数のレコードを一気に追加することができる。

他にあったのはDB Browser for SQLiteを使ってcsvファイルを読み込み、テーブルに変換して、sqliteでテーブルを結合する方法。しかし筆者はにわかのため内部結合やら外部結合の意味まではよくわかっておらず、学習したくなかったので投げた。DB Browser for SQLiteを使ってGUIでテーブルの結合ができれば・・・。と思ったが残念ながらその機能はないようだ。

pythonを使えばcsvファイルから直接データベースに登録できるのでこの方法で行うことにする。ちなみにグーグルキープの音声入力は、少し発声をやめると半角スペースが入るので、このスペースをカンマに変換する。グーグルキープだと目視でテキストを確認できるのでこれもよい。

テキストファイルの半角スペースをカンマに変換するpythonコード

# クッション
input("エンターキーで実行します: ")

# 書き込み用配列作成
contents = []

# 1行ずつファイルの読み込み
with open('users2.csv', 'r') as f:
    for line in f:
        line = line.replace(' ', ',')
        contents.append(line)

# 1行ずつ書き込み
with open('users2.csv', 'w') as f:
    for content in contents:
        f.write(content)
        
# クッション
input("変換しました。エンターキーで終了します: ")

csvデータをsqliteデータベースに追加するpythonコード

# -*- coding: utf-8 -*-
# sqlite3モジュール、csvモジュールの読み込み
import sqlite3, csv

# クッション
input("エンターキーで実行します: ")

# ファイルを読み込みモードでオープン
with open('users2.csv', 'r') as f:
  # cscreaderオブジェクトの作成
  reader = csv.reader(f)

  # タプルのリストを作成
  tuples= []

  # 1行ごと処理
  for row in reader:
      # 1行をタプルに変換してリストに追加
      tuples.append(tuple(row))

# データベースに接続
conn = sqlite3.connect('database.sqlite')
 
# カーソルオブジェクトの作成
c = conn.cursor()
 
# データの挿入 
sql = "insert into users(name, address) values (?, ?)"
c.executemany(sql, tuples)
 
# コミット
conn.commit()
 
print("\n") # 空行
print("ユーザーを登録しました")
print("\n") # 空行
 
select = "select * from users"
for row in c.execute(select):
    print(row)
 
print('\n') # 空行
 
# エンターキー
input("エンターキーで終了します: ")
 
# データベースの切断
conn.close()

ユーザー追加のクエリがタプルのリストだった場合(複数のユーザーを追加する場合は)execute()ではなくexecutemany()を使う必要がある。注意点はそのくらいだ。

2つのサンプルコードは一度に全部実行してもよいが、怖いのであえて2つにわけている。

雑感

スマートフォンのグーグルキープで入力したものは共有されているのでパソコンでも同じ内容が表示される。でもインターネットにつながっているのが条件なんだよなあ~と個人的な駄文でこの記事は終了。


Warning: Undefined array key "thumbnail_url" in /home/users/1/boy.jp-rolpop/web/skc/wp-content/themes/godios/inc/schema-org.php on line 49

Warning: Undefined array key "thumbnail_url" in /home/users/1/boy.jp-rolpop/web/skc/wp-content/themes/godios/inc/schema-org.php on line 78