kuroの覚え書き

96の個人的覚え書き

インプットファイルの整形からSQLiteへのインポートまでを1スクリプトで

import glob
import csv
import os

def cat_input_files(lst):
    for f in lst:
        with open(f, 'r') as inp:
            reader = csv.reader(inp, delimiter='\t')
            next(reader)
            for row in reader:
                with open('./temp/temp.txt', 'a') as oup:
                    writer = csv.writer(oup, delimiter='\t', lineterminator='\n')
                    writer.writerow(row)

def add_id_number(target):
    id_number = 1649430
    for line in open(target, 'r'):
        line = line.rstrip()
        if line:
            with open('input.txt', 'a') as f:
                print(line, str(id_number), sep='\t' , file=f)
                id_number += 1
        else:
            print("\n")

def main():
    if not os.path.exists("./temp"):
        os.makedirs("./temp")
    lst = glob.glob("*/*.txt")
    cat_input_files(lst)

    target = "./temp/temp.txt"
    if os.path.exists(target):
        add_id_number(target)
    else:
        print("Failure : No File exists")

    cmd = "sqlite3 -separator $'\t' ./test.db '.import ./input.txt test'"
    subprocess.call(cmd, shell=True )

if __name__ == '__main__':
    main()

これでSQLにインポートまで一気にいけるようになった。

IDにナンバーを振り当てるid_numberの初期値とデータファイルの在り処をformで指定して一気に処理できるのじゃなかろうか。