Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在postgres中逐行读取和存储csv数据_Python_Postgresql - Fatal编程技术网

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

Python 在postgres中逐行读取和存储csv数据,python,postgresql,Python,Postgresql,我想从不同的文件复制csv数据,然后存储在一个表中。但问题是,每个csv文件中的列数不同,因此一些csv文件有3列,而一些csv文件有4列。因此,如果一个文件中有4列,我只想忽略第四列,只保存前三列 使用以下代码,我可以将数据复制到表中,如果只有3列 CREATE TABLE ImportCSVTable ( name varchar(100), address varchar(100), phone v

我想从不同的文件复制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 '"';
但我期待着单独检查每一行,然后将其存储在表中


谢谢。

使用文本工具切掉第四列。这样,所有输入文件都将有三列。
awk
cut
sed
的一些组合应该可以为您解决这个问题,但这取决于您的列的外观。

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

因为您希望一次读取并存储一行,无论是否有任何额外的列,都可以轻松地从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

谢谢,但我想逐行阅读文件,我发现我应该使用STDIN。