在postgres中逐行读取和存储csv数据

2024-09-30 22:09:58 发布

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

我想从不同的文件复制csv数据,然后存储在一个表中。但问题是,每个csv文件的列数不同,所以有些csv文件有3列,有些csv文件有4列。所以如果一个文件中有4列,我只想忽略第四列,只保存前三列。在

使用下面的代码,我可以将数据复制到表中,如果只有3列

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




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

但我期待着逐个检查每一行,然后将其存储在表中。在

谢谢。在


Tags: 文件csv数据path代码namefromaddress
3条回答

由于您希望一次读取并存储一行,因此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

使用文本工具切掉第四列。这样,所有的输入文件将有三列。一些awkcut和{}的组合应该可以为您处理这些问题,但这取决于列的外观。在

您也可以让您的输入表有一个可为null的第四列,然后在导入之后删除额外的列。在

相关问题 更多 >