gpt4 book ai didi

python - 如何在不提前知道列数的情况下将 CSV 文件导入 Python 中的 sqlite3?

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:40 25 4
gpt4 key购买 nike

我目前正在尝试使用 Python 将 CSV 文件导入到 SQLite 数据库中,使用顶部字段作为列名,但我需要能够导入任何 CSV 文件,无论它有多少列。我知道如何使用 csv 顶行创建列名,但我看到的每个关于将 csv 文件导入 python 数据库的示例,python 程序都指定了列数。但是,这个程序会让用户在输入框中提供 csv 文件名,允许他们选择不同的文件名,所以我不会提前知道需要分配多少列。我将如何着手制作它以便程序自动检测列数并相应地定义表格?到目前为止,我有这样的东西(不完全是,但是一个很好的例子),但默认情况下它只有两列。哦,我稍后会更改它以添加一个选项供用户输入要打开的文件名,所以不用担心(大部分已经在不同的模块中实现)。

import csv, sqlite3

con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("CREATE TABLE t (col1, col2);")

with open('data.csv','rb') as fin:

dr = csv.DictReader(fin) #dr assigned value in DictReader
to_db = [(i['col1'], i['col2']) for i in dr] #

cur.executemany("INSERT INTO t (col1, col2) VALUES (?, ?);", to_db)
con.commit()

更新:
我现在的代码是这样的:

import csv, sqlite3
from Tkinter import *
from tkFileDialog import askopenfilename






def choosefilename():
return askopenfilename()



def main():
con = sqlite3.connect(":memory:")

csvFileName = choosefilename()
cur = con.cursor()
with open(csvFileName,'rb') as fin:
data_csv = csv.DictReader(fin)
column_count = len(list(list(data_csv))[0])
create_table_statement = "CREATE TABLE t ("
for column in xrange(1, column_count):
create_table_statement = create_table_statement + 'col{0}'.format(column)
create_table_statement = create_table_statement + ');'
cur.execute(create_table_statement)
[cur.execute('INSERT INTO t values ('+'%s,'*column_count[:-1]+')', d) for d in data_csv]



Button(text='File Open', command = choosefilename).pack(fill="x")
main()

它本身不会报错,但当您尝试退出打开的文件按钮框时它会卡住。

最佳答案

如果您愿意使用 pandas 库,可以使用两个函数轻松实现:

pandas.read_csv

会返回一个dataframe对象,然后使用Dataframe方法

Dataframe.to_sql

创建您的数据库。 Pandas 应该非常聪明地处理你的 csv 标题。您可能只需要使用默认参数。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.to_sql.html

关于python - 如何在不提前知道列数的情况下将 CSV 文件导入 Python 中的 sqlite3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37557005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com