Python Postgresql: 忽略CSV文件的最后一列

2 投票
4 回答
3226 浏览
提问于 2025-04-16 14:45

我在导入CSV文件时遇到问题。我正在使用PostgreSQL的COPY FROM命令,将一个CSV文件复制到一个有两列的表中。

我的CSV文件格式如下:

"1";"A"
"2";"B"
"3";"C";"CAD450"
"4";"D";"ABX123"

我想把CSV文件中的所有行都导入到表里,但我想跳过任何多余的列。

目前,我正在跳过包含多余列的行,比如这里的列 "1";"C";"CAD450""1";"D";"ABX123" 被跳过了,我只导入了前两列。但我想把这四行都复制到我的表中。有没有办法可以忽略最后一列,把这四行都导入到我的表里,像这样:

"1";"A"
"1";"B"
"1";"C"
"1";"D"

4 个回答

2

cutawk 来处理数据,比用 python/psycopg 要简单得多。

你可以这样做:cat csv_file.csv | cut -d';' -f1,2 | psql -u USER DATABASE -c "COPY table FROM STDIN WITH DELIMITER ';';"

2

用awk这个工具处理一下文件,把多余的列去掉:

awk -F';' '{print $1 ";" $2 }' > new_file.csv
1

在编程中,有时候我们会遇到一些问题,可能是因为代码写得不够好,或者是我们对某些概念理解得不够透彻。比如,有人可能在使用某个功能时,发现它的表现和预期不一样,这时候就需要仔细检查代码,看看是不是哪里出了问题。

另外,编程语言和工具的使用也会影响我们的代码表现。有些工具可能会有一些限制,或者在某些情况下表现得不如我们想象的那样好。因此,了解这些工具的特性和限制是非常重要的。

总之,编程就像是解谜一样,有时候需要耐心和细心去找出问题的根源,才能让我们的代码更好地运行。

with open("file.csv","r") as f:
    t=[line.strip().split(";")[:2] for line in f]

撰写回答