2011-04-14 25 views
1

我想從不同的文件複製csv數據,然後存儲在一個表中。但問題是,每個csv文件的列數不同,所以一些csv文件有3列,而有些則有4列。所以如果文件中有4列,我想簡單地忽略第四列並只保存前三。讀取和存儲csv數據逐行postgres

使用下面的代碼,我可以將數據複製到表中,如果只有3列,

CREATE TABLE ImportCSVTable (
      name varchar(100), 
        address varchar(100), 
        phone varchar(100)); 




COPY ImportCSVTable (name , address , phone) 
     FROM 'path' 
     WITH DELIMITER ';' CSV QUOTE '"'; 

但我很期待逐個檢查每一行,然後將其存儲在表中。

謝謝。

回答

2

由於您想一次讀取並存儲一行,因此無論有多少列,Python csv module都可以輕鬆讀取CSV文件中的前3列。

您可以構建一個INSERT語句並使用您首選的Python-PostGreSQL模塊執行它。我過去使用過pyPgSQL;不知道現在是什麼。

#!/usr/bin/env python 
import csv 
filesource = 'PeopleAndResources.csv' 
with open(filesource, 'rb') as f: 
    reader = csv.reader(f, delimiter=';', quotechar='"') 
    for row in reader: 
     statement = "INSERT INTO ImportCSVTable " + \ 
     "(name, address, phone) " + \ 
     "VALUES ('%s', '%s', '%s')" % (tuple(row[0:3])) 
     #execute statement 
0

使用文本工具截斷第四列。這樣,所有的輸入文件將有三列。 awk,cutsed的某些組合應該爲您處理,但這取決於您的列的外觀。

+0

謝謝,但我想逐行閱讀文件,並且發現我應該使用STDIN來達到此目的。 – 2011-04-15 06:59:16

0

您也可以讓輸入表具有可爲空的第四列,然後在導入後刪除多餘的列。