0

所以,我导入了一个 CSV 文件,它可以有任意数量的列和行。我想将结果存储在一个临时表中,例如:“TEMP_30f3724fc226e058”,而不是跨多个页面处理 CSV 文件。

我有以下内容,但除此之外,我不确定如何添加本质上未知数量的列和行。任何想法都会很棒。

key = '30f3724fc226e058'
cursor = connection.cursor()
db_name = 'TEMP_{0}'.format(key)
cursor.execute('CREATE TEMPORARY TABLE {0} (X INT)'.format(db_name))
... ?

从 CSV 插入数据,然后我可以在 CSV 导入过程中的任何时候提取该数据。再次感谢,

4

1 回答 1

2

步骤是:

  1. 读取文件的一行,以获取列数。
  2. 创建具有这些列数的表。
  3. 循环浏览剩余的文件。

像这样的东西:

import csv
import time

column_count = 2 # Assume we have 2 columns, which is the minimum

with open('somefile.txt') as f:
    reader = csv.reader(f, delimiter=',')
    # fetch the first row, grab the column length
    column_count = len(next(reader)) 

# Next, create the table:

table_name = 'sometable_{0}'.format(int(time.time()))

q = 'CREATE TEMPORARY TABLE {0} ('.format(table_name)
q += ', '.join('col_{0} VARCHAR(255)'.format(i) for i in range(column_count))
q += ');'

cur.execute(q)
cur.commit()

q = "INSERT INTO {0} VALUES (".format(table_name)
q += ', '.join(('%s ' * column_count).split())
q += ');'


# Now, populate it

with open('somefile.txt') as f:
    reader = csv.reader(f, delimiter=',')
    for row in reader:
        cur.execute(q, tuple(row))
        cur.commit()
于 2013-09-30T08:15:51.070 回答