逐行读取和存储Postgres中的csv数据
我想从不同的文件中复制csv数据,然后把它们存储到一个表格里。但是问题是,每个csv文件的列数不一样,有的文件有3列,有的文件有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 '"';
不过,我想逐行检查每一行的数据,然后再把它存储到表格里。
谢谢。
3 个回答
0
你也可以在输入表格中加一个可以为空的第四列,然后在导入数据后把这个多余的列删掉。
0
使用一个文本工具来去掉第四列。这样,你所有的输入文件就会只有三列了。你可以用一些组合的命令,比如 awk
、cut
和 sed
来处理这个问题,不过具体用哪个要看你的列是怎么排列的。
3
因为你想要一行一行地读取和存储数据,所以使用Python的csv模块会很方便,它可以让你轻松地从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