我已经设法将多个csv文件(包含在一个文件夹中)导入到SQLite数据库中 - 这要感谢我在之前的 question on this forum上收到的非常有用的反馈。通过Python在SQLite数据库中合并数据
A16_B1_T5A16_B1_T6包含来自同一传感器的数据,测量温度和湿度。然而,它们是在一年的不同时间收集的,因此它们总是有重要的重叠(即T5可能表示2015年4月 - > 10月收集的数据,而2015年7月 - > 2015年12月)。
我现在试图将两个或多个表(最初对应于单独的csv文件)合并为一个。对于参考示例,应将A16_B1_T5和A16_B1_T6合并到A16_B1_T(或A16_B1_TT)中。这意味着追加以及覆盖/删除重复数据。
有关如何做到这一点的任何提示?批量导入CSV到sqlite的原工作代码如下:
import csv
import sqlite3
import glob
import os
def do_directory(dirname, db):
for filename in glob.glob(os.path.join(dirname, '*.csv')):
do_file(filename, db)
def do_file(filename, db):
with open(filename) as f:
with db:
data = csv.DictReader(f)
cols = data.fieldnames
table=os.path.splitext(os.path.basename(filename))[0]
sql = 'drop table if exists "{}"'.format(table)
db.execute(sql)
sql = 'create table "{table}" ({cols})'.format(
table=table,
cols=','.join('"{}"'.format(col) for col in cols))
db.execute(sql)
sql = 'insert into "{table}" values ({vals})'.format(
table=table,
vals=','.join('?' for col in cols))
db.executemany(sql, (list(map(row.get, cols)) for row in data))
if __name__ == '__main__':
connection = sqlite3.connect('C:/ROAST/3_ANALYSIS/03_SQL-PY/primo.db')
do_directory('C:/ROAST/3_ANALYSIS/03_SQL-PY\A08_csv',connection)
jsbueno,谢谢。这可以在Python代码中实现,而不是在SQLite环境中使用? – Andreuccio
您只需从Python内发出SQL语句 - 作为'db.execute'的参数 – jsbueno
再次感谢。但是,从您的回复看来,这会为新表创建更多列,这不是我想要的。 我想要有相同数量的clumns并追加/覆盖行。 – Andreuccio