1

次のような csv ファイル「users.csv」があります。

AppID,Perm,LastLogon,Email,FirstName
jimmeny1,admin,today,jim5@zerlina.com,pop1
jimmeny2,admin,today,jim10@zerlina.com,pop2
jimmeny3,admin,today,jim6@zerlina.com,pop3

以下の関数を作成して、csv から任意の数の列を sqlite テーブルにロードします。

import sqlite3, csv

def bulkload(file, **args):
    sqlite = sqlite3.connect('mydb.db')
    s1 = sqlite.cursor()
    cols_string = '('
    cols = []
    for i in args.iteritems():
        col = '{} {}'.format(i[0], i[1][1])
        cols.append(col)
    for x, i in enumerate(cols):
        if x != len(cols) - 1:
            cols_string += i + ','
        if x == len(cols) - 1:
            cols_string += i + ')'
    sql1 = "CREATE TABLE IF NOT EXISTS mytable {}".format(cols_string)
    s1.execute(sql1)

関数の呼び出し例:

bulkload('users.csv', appid=(0, 'text'), perm=(1,'text'), email=(3,'text'))

列名とストレージ クラスを宣言する文字列 'cols_string' を作成するための、より簡単でエレガントな、または単により Pythonic な方法はありますか?

4

1 に答える 1

1

以下を置き換える必要があります

cols_string = '('
for x, i in enumerate(cols):
    if x != len(cols) - 1:
        cols_string += i + ','
    if x == len(cols) - 1:
        cols_string += i + ')'

以下を使用すると、よりPythonicで高速になります( ''.join()メソッドによる)

cols_string = '(' + ','.join(cols) + ')'
于 2013-11-15T07:42:26.470 に答える