kuroの覚え書き

96の個人的覚え書き

SQLiteにインポートするファイルにIDを前もって入れておく

MacSQLiteではIDカラム分の無いファイルをインポートしようとしたらカラムが足らないのでnullを埋めるよという警告が出た上でインポートされ、ついでにPRIMARY KEYなのでインクリメントされたIDを自動でふってくれるのだが、どういうわけかCentOSではエラーを出してインポートすらしてくれない。なので、まえもってIDを振ってやってからインポートするしかないので、そのための方法をいろいろ考えた結果、 Pythonで文字列処理をすることにした。

id_add.py

import os.path
import sys


def check_argv():
    if len(sys.argv) == 0 and len(sys.argv) > 2:  #sys.argvはコマンドライン引数、len(sys.argv)は引数の数。
        return False
    else:
        return True


def add_line_number(target):
    line_number = 10001  #ここに開始ID(前回までの最終ID+1)を入れておく

    for line in open(target, 'r'):
        line = line.rstrip()
        if line:
            print(line, str(line_number), sep='\t' )
            line_number += 1
        else:
            print("\n")


def main():
    if check_argv():
        target = sys.argv[1]
        if os.path.exists(target):
            add_line_number(target)
        else:
            print("Failure : No File exists")
    else:
        sys.exit()


if __name__ == '__main__':
    main()

実行は

# python3 id_add.py target.txt > result.txt

これでいけるはず。

参考ページ
http://uchikoshi22.hatenadiary.jp/entry/20100626/1316074659