我想从不同的文件中复制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 '"';
但我期待单独检查每一行,然后将其存储在表格中。
谢谢。
答案 0 :(得分: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
答案 1 :(得分:0)
使用文本实用程序切断第四列。这样,所有输入文件都有三列。 awk
,cut
和sed
的某些组合应该为您处理,但这取决于您的列的外观。
答案 2 :(得分:0)
你也可以让你的输入表有一个可以为空的第四列,然后在导入之后删除额外的列。