簡體   English   中英

動態處理csv中的數據列以導入到Postgresql

[英]Dynamically handling data columns in csv for import to Postgresql

我是python(3)的新手,很難找到有關如何處理以下情況的相關示例。 我知道這幾乎是“什么最好”的問題,但是希望有一個顯然合適的方法。

我有csv數據文件,其中包含時間戳,然后至少一列數據的名稱由主列表定義(即,所有可能的列標題都是已知的)。 例如:

File1.csv

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

File2.csv

date-time, data d, data a
2014-01-01, 99, 20
2014-01-01, 100, 22

我一直在兜圈子,試圖了解何時將元組,列表和字典用於這種類型的情況,以導入到postgresql中。 由於列的順序可以更改,並且列的列表每次都不同(盡管總是從主集開始),所以我不確定如何最好地生成包含時間戳和列的數據集,然后執行插入操作一個postgresql表,其中未指定的列被提供一個值。

考慮到列存在的動態性質,以及需要通過psycopg保持與Postgresql導入的時間戳的關系,建議采取什么措施? 清單,清單清單,字典或元組?

我不是在請求特定的代碼,只是一些指導。 謝謝。

您可以使用csv模塊來解析輸入文件,並且可以通過它的第一行來構建(准備)帶有列名和%s而不是值的psycopg insert語句。 對於其余的行,只需執行以下語句,並將row作為值:

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()

...

對於您的示例,您將必須更正列名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM