PythonでTUIアプリを作ろう 第二部入魂編 ( その4 データのロード )
作成したListDB用CSVファイルで、データベースを作成します。
CSVデータのロード
CSVファイルをデータベースにロードするには、「ListDBの構造について」で説明したように、下記のメソッドを使用します。
# 4.指定されたCSVファイルからデータをimport。問題なければ、’True'が返る。
ret_code = manager.import_csv(fname)
# fname : CSVファイル名
ただ、CSVファイルを1つずつ指定するのは面倒なので、ディレクトリ内のCSVファイル(.csv)全件を対象にしたスクリプトで対応します。CSVファイルが増加しても、ディレクトリにファイルを追加するだけで、もれなく処理することができます。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# load_db.py
#
import os, sys
import time
from listdb.manager import get_manager
def reprDirInfo(dirpath, flist):
for path in os.listdir(dirpath):
full = os.path.join(dirpath,path)
if os.path.isdir(full):
reprDirInfo(full, flist)
elif os.path.isfile(full):
flist.append(full)
def main(database_name, database_connect, csv_dir):
manager = get_manager(database_name, database_connect)
manager.define()
flist = []
reprDirInfo(csv_dir, flist)
for full in flist:
(root,ext) = os.path.splitext(full)
if ext.lower()=='.csv':
ret_code = manager.import_csv(full);
print ("Loaded "+ full+" ret:"+str(ret_code))
manager.close()
if __name__ == '__main__':
if len(sys.argv) < 4:
print ("Specify <databese name> <connect string> <CSV dir>")
sys.exit()
time1 = time.time()
main(sys.argv[1], sys.argv[2], sys.argv[3])
time2 = time.time() - time1
print ('Elapse:'+str(time2) +"sec")
実行パラメータは、「データベース名」「作成するデータベース名称」「CSVファイルのディレクトリ名」となります。
python3 load_db.py 'SQLITE3' './db/ListDB.sqlite3' './csv'
実行すると、下記のようにロード対象になったCSVファイル名が表示されます。
Loaded ./csv/bookoff_tokyo.csv ret:True
Loaded ./csv/anthology.csv ret:True
Loaded ./csv/eqmm.csv ret:True
Loaded ./csv/hardoff_tokyo.csv ret:True
Elapse:xxxxsec
ソースコードについて
GitHubに登録しました。今回のコードは、Section14となります。
- csvディレクトリ
スクレイピングによるデータ収集で説明したSection13をそのままコピーしたものになります。
CSVのデータについては、前回作成した「ブックオフ店舗情報(東京都)」「ハードオフ店舗情報(東京都)」の他に、わたしがこのブログ内で読み続けている「EQMM作品評価リスト(78号まで)」と「アンソロジー作品評価リスト」を加えてみました。 - listdbディレクトリ
ListDBの構造についてで説明したListDBパッケージのソースコードです。ソースの詳細についての説明は省きます。
これでデータベース作成が完了しました。
次回は、ここまで作成してきたPython UrwidのTUI部品を組み合わせて、動作するアプリケーションを構築していきます。