如何获取任意 csv 文件并使用 python 创建一个包含指定列的新表?假设我有许多具有不同列名的不同 csv 文件,我想使用 python 为每个单独的文件创建一个表。
问问题
4733 次
1 回答
8
在以下示例中,我假设文件包含定义列名的第一行。否则,您可以只使用固定的名称列表。我概述的解决方案可以改进以测试实际数据值以推断它们的类型,但我假设最初您会对只为 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')]
如果您的数据涉及 Unicode,请小心,因为已知 Python 2 csv 模块不是 Unicode 安全的。(出于这个原因,我最近不得不写自己的读者)。
于 2012-12-13T09:39:38.360 回答