5

Python を使用して、任意の csv ファイルを取得し、指定された列を含む新しいテーブルを作成するにはどうすればよいですか? 列名が異なる多数の csv ファイルがあり、Python を使用して個々のファイルごとにテーブルを作成したいとします。

4

1 に答える 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')]

Python 2 csv モジュールは Unicode セーフではないことが知られているため、データに Unicode が含まれている場合は注意してください。(私は最近、まさにその理由で自分のリーダーを書かなければなりませんでした)。

于 2012-12-13T09:39:38.360 に答える