动态处理csv中的数据列以导入Postgresq

2024-04-19 18:24:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python(3)新手,很难找到如何处理以下场景的相关示例。我知道这是一个“什么是最好”的问题,但希望有一个明确合适的方法来解决这个问题。在

我有csv数据文件,其中包含时间戳,然后至少有一列数据的名称由主列表定义(即,所有可能的列标题都是已知的)。例如:

文件1.csv

date-time, data a, data b
2014-01-01, 23, 22
2014-01-01, 23, 22d

文件2.csv

^{pr2}$

我一直在绕圈子,试图理解在这种情况下何时使用元组、列表和字典来导入postgresql。由于列顺序可以更改,列列表每次都不同(尽管总是来自主集),我不确定如何最好地生成一个包含时间戳和列的数据集,然后在postgresql表中执行insert,其中未指定的列将被提供一个值。在

考虑到列的存在是动态的,并且需要通过psycopg维护与Postgresql导入的时间戳的关系,推荐什么?列表,列表列表,字典,还是元组?在

我不是在乞求具体的代码,只是一些指导。谢谢。在


Tags: 文件csv数据方法名称示例列表data
1条回答
网友
1楼 · 发布于 2024-04-19 18:24:24

您可以使用csv模块来解析输入文件,通过它的第一行,您可以构建(准备)具有列名和%s而不是值的psycopg插入语句。对于其余行,只需使用row as值执行此语句:

connect_string = 'dbname=test host=localhost port=5493 user=postgres password=postgres'
connection = psycopg2.connect(connect_string)
cursor = connection.cursor()
f = open(fn, 'rt')
try:
    reader = csv.reader(f)
    cols = []
    for row in reader:
        if not cols:
            cols = row
            psycopg_marks  = ','.join(['%s' for s in cols])
            insert_statement = "INSERT INTO xyz (%s) VALUES (%s)" % (','.join(cols), psycopg_marks)
            print(insert_statement)
        else:
            print(row)
            cursor.execute(insert_statement, row)
finally:
    f.close()

...

对于您的示例,您必须更正列名。在

相关问题 更多 >