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部品を組み合わせて、動作するアプリケーションを構築していきます。