Python将整个列添加到CSV文件中,而无需读取文件内容

3
我需要使用Python向csv文件添加列。我能想到的唯一方法是读取整个文件,编辑每一行以添加一个元素,然后再次写入文件。但是,由于文件太大(超过32000行),每次想要添加列都需要大量的读写操作,因此我真的不想这样做。即使使用csv模块,原理也是相同的,需要先读取所有内容,再进行编辑和写入。
为了明确,下面是一个csv文件示例。Original Answer翻译成"最初的回答"。
1,2
1,2
1,2
1,2

我想添加第三列,使文件变成以下格式:

1,2,3
1,2,3
1,2,3
1,2,3

如果我想添加整个行(或线),我可以使用open(csvfile, 'a')并将最后一行“附加”到文件中。是否有类似的选项可以添加列?翻译成中文为:如果要添加整个列,是否有类似于open(csvfile, 'a')的选项可以将最后一列“附加”到文件中?

可以在这里使用awksed - Divyanshu Srivastava
但是即使在这种情况下,您也必须读取(和写入)整个文件,对吗? - Raphael
不,这是不可能的。我建议您使用Pandas而不是CSV库来操作数据。这可能有点过度,但更加直观。 - BcK
不好的解决方案-循环遍历每一行。追加新值。将其写入新文件或同一文件。最好的解决方案是使用 pandas - bigbounty
2个回答

1

对于一个原始的csv文件,例如foo.csv

1,2 
1,2
1,2
1,2

只需创建另一个文件来保存要添加的列,比如 bar.csv

3
3
3
3

那么,Unix的paste命令可以通过os.system在Python中调用,如下所示:

import os
os.system("paste foo.csv  bar.csv -d ',' > output.csv")

这段文字的英译中文为:

这将得到结果output.csv

1,2,3
1,2,3
1,2,3
1,2,3

我想使用paste,本质上意味着要读取文件并将其合并到新文件中。但是我认为这是最好的答案!简单,而且不需要在Python内进行任何数据操作。我接受了,但由于声望低不能点赞。 - LecauseAndThePi
paste的确会遍历整个文件内容,但它并不是一次性将整个文件读入内存中。它逐行进行遍历。 - Divyanshu Srivastava

0

很不幸,这是不可能的。文本文件是序列,如果您想在其中添加内容,则必须移动所有剩余内容(因此您必须读取和写入它)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接