在下面的示例中,我假设文件包含定义列名的第一行.否则,您可以使用固定的名称列表.我可以改进我概述的解决方案来测试实际数据值以推断它们的类型,但我认为最初你会对一个只为CSV文件中的每一列定义varchar字段的解决方案感到满意(sqlite将所有内容存储为无论如何,人物数据).
In [54]: f = open("/Users/sholden/test.csv", 'rU')
In [55]: reader = csv.reader(f)
In [56]: names = reader.next()
In [57]: names
Out[57]: ['First', 'Second', 'Third']
In [65]: import sqlite3 as db
In [66]: conn = db.connect(":memory:")
In [67]: curs = conn.cursor()
In [68]: sql = """create table x (\n""" +\
",\n".join([("%s varchar" % name) for name in names])\
+ ")"
In [69]: sql
Out[69]: 'create table x (\nFirst varchar,\nSecond varchar,\nThird varchar)'
In [70]: curs.execute(sql)
Out[70]: <sqlite3.Cursor at 0x101f2eea0>
In [71]: for line in reader:
curs.execute("""INSERT INTO x (First, Second, Third)
VALUES (?, ?, ?)""", tuple(line))
....:
In [72]: curs.execute("SELECT * FROM x")
Out[72]: <sqlite3.Cursor at 0x101f2eea0>
In [73]: curs.fetchall()
Out[73]: [(u'3', u'4', u'Charlie'), (u'5', u'6', u'Damion'), (u'78', u'90', u'Sidney')]
Run Code Online (Sandbox Code Playgroud)
如果您的数据涉及Unicode,请小心,因为已知Python 2 csv模块不是Unicode安全的.(因为这个原因,我最近不得不写自己的读者).
| 归档时间: |
|
| 查看次数: |
3361 次 |
| 最近记录: |