【问题标题】:dynamic csv to sqlite importing动态 csv 到 sqlite 导入
【发布时间】:2013-06-03 23:49:36
【问题描述】:
with open((path + 'stuff.csv'),'r+') as fin1:
    dr1 = csv.DictReader(fin1)
    create1="CREATE TABLE LGD ("
    exe1="INSERT INTO LGD ("
    for a in dr1.fieldnames:
        if a=='':
            pass
        elif ' ' in a:
            create1+=a.replace(" ","")+','
            exe1+=a.replace(" ","")+','
        else:
            create1 += a + ","
            exe1+= a + ","
    create1 = create1[:-1]
    exe1=exe1[:-1]
    create1 +=");"
        exe1+=") VALUES ("
    for a in range(len(dr1.fieldnames)-1):
        exe1+='?'+","
    exe1=exe1[:-1]
    exe1+=");"
    cur.execute(create1)
    to_db1 = [(a[dr1.fieldnames[0]],a[dr1.fieldnames[1]],a[dr1.fieldnames[2]],a[dr1.fieldnames[3]],a[dr1.fieldnames[4]]) for a in dr1]
    cur.executemany(exe1,to_db1)
    conn.commit()

好的,我的目标是将每个 csv 文档作为表格导入 sqlite 数据库。假设我有 100 个。

现在我的代码动态写入字符串,但我如何创建 to_db1 列表,这样我就不必定义有多少列?

特别是这一行

to_db1 = [(a[dr1.fieldnames[0]],a[dr1.fieldnames[1]],a[dr1.fieldnames[2]],a[dr1.fieldnames[3]],a[dr1.fieldnames[4]]) for a in dr1]

我见过这个问题,但我的问题不同,因为字段名称中有空格,并且由于许多文档不可编辑,因此无法取出。我也不想丢失下面显示的列表格式。

[(stuff,stuff,stuff),(stuff,stuff,stuff)]

Dynamically import columns from csv into database table in sqlite3 and python

为了重申我的问题,我想创建 to_db1 列表而不在编译时定义列名。它应该以这种格式创建它

[(stuff,stuff,stuff),(stuff,stuff,stuff)] 

在运行时。

【问题讨论】:

  • 我不太明白你的问题。在创建表之前,您当然要了解需要多少列(可以动态添加新列,但我认为这不会解决您的问题)
  • 我特别指出的那行穿过 csv 并抓取每一行的内容并将它们添加到列表中。在运行时,我希望它在没有我特别定义键的情况下创建列表 ex.a[dr.fieldnames[0]]

标签: python sqlite list dynamic csv


【解决方案1】:

要获取不带空格且已用逗号连接的字段名,您可以使用列表推导:

names = ['my _id', 'some a', 'some b']
sanitized_names = "({})".format(", ".join(x.replace(' ','') for x in names))

# => (my_id, somea, someb)

从那里,您可以重复使用链接到的答案。

要从dr1 中的字典中获取元组,如dr1.fieldnames,请使用[tuple(a[x] for x in dr1.fieldnames) for a in dr1]

【讨论】:

  • 我想你误解了我的问题,看看我特别指出的那一行。我的代码已经为表格的列标题去掉了空格。但是键不能更改,必须有正确的空间来获取 csv 的内容。
  • 我想我做到了。我已经更新了我的答案,这能解决你的问题吗?
  • 是的,它确实有一个额外的列,其中标题和值是 '' 但没关系,只是在表中将该列命名为无用。谢谢
猜你喜欢
  • 2014-05-15
  • 2017-05-14
  • 2013-02-03
  • 2019-06-20
  • 1970-01-01
  • 2012-03-08
  • 2015-09-23
  • 2012-09-14
  • 2011-05-20
相关资源
最近更新 更多