我有一个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'))
是否有更简单,更优雅或更简单的pythonic方式来创建声明列名和存储类的字符串'cols_string'?
答案 0 :(得分: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) + ')'