Python 在postgres中逐行读取和存储csv数据
我想从不同的文件复制csv数据,然后存储在一个表中。但问题是,每个csv文件中的列数不同,因此一些csv文件有3列,而一些csv文件有4列。因此,如果一个文件中有4列,我只想忽略第四列,只保存前三列 使用以下代码,我可以将数据复制到表中,如果只有3列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
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。