csv
模块逐个构建CSV块这意味着我正在循环中逐个添加行。我添加的每一行都包含数据帧中每一列的信息。你知道吗
所以,我有一个CSV:
A B C D
我一行一行地添加:
A B C D
aaaaa bbb ccccc ddddd
a1a1a b1b1 c1c1c1 d1d1d1
a2a2a b2b2 c2c2c2 d2d2d2
等等。你知道吗
我的问题是,有时,我添加的行包含更多的信息(即,没有列的信息)。例如:
A B C D
aaaaa bbb ccccc ddddd
a1a1a b1b1 c1c1c1 d1d1d1
a2a2a b2b2 c2c2c2 d2d2d2
a3a3a b3b3 c3c3c3 d3d3d3 e3e3e3 #this row has extra information
My question is: Is there any way to make the CSV grow (during runtime) when that happens? (with 'grow' I mean to add the "extra" columns)
所以基本上我希望这样:
A B C D E # this column was added because
aaaaa bbb ccccc ddddd # of the extra column found
a1a1a b1b1 c1c1c1 d1d1d1 # in the new row
a2a2a b2b2 c2c2c2 d2d2d2
a3a3a b3b3 c3c3c3 d3d3d3 e3e3e3
我使用标准库中的csv
模块、with
语句和字典添加行:
import csv
addThis = {A:'a3a3a', B:'b3b3', C:'c3c3c3', D:'d3d3d3', E:'e3e3e3'}
with open('csvFile', 'a') as f:
writer = csv.writer(f)
writer.writerow(addThis)
如您所见,在我添加的字典中,我指定了新列的名称。当我尝试时,会发生这样的异常:
ValueError: dict contains fields not in fieldnames: 'E'
在添加行之前,我尝试将“extra”字段名添加到csv
中,如下所示:
fields = writer.__getattribute__('fieldnames')
writer.fieldnames = fields + ['E']
注意:从这个例子看来,我已经添加了E
,但事实并非如此。我只是举个例子。我不知道“额外”数据将是什么,直到我得到“额外”行(这是我在一段时间内从一个websrap获得的)。你知道吗
它成功地避开了异常,但没有添加额外的列,因此我最终得到如下结果:
A B C D
aaaaa bbb ccccc ddddd
a1a1a b1b1 c1c1c1 d1d1d1
a2a2a b2b2 c2c2c2 d2d2d2
a3a3a b3b3 c3c3c3 d3d3d3 e3e3e3 # value is added but the column
# name is not there
我之所以不使用Pandas,是因为我知道Pandas是为加载完全填充的数据帧而设计的,但是如果您建议的话,我愿意使用csv
模块之外的其他东西。有什么想法吗?你知道吗
谢谢你的帮助,很抱歉问了这么长时间,我尽量说清楚。你知道吗
我想你需要重写整个文件。当前您正在用
a
打开文件,因此只能在文件末尾添加内容,而不能在文件中间添加内容。我不认为有一个简单的解决方案,添加一些东西在一个文件的中间。你知道吗最简单的解决方案是将整个文件读入内存,将新列添加到标题行,然后重写整个文件。你知道吗
请参见this question以获取有关如何做到这一点的示例。你知道吗
相关问题 更多 >
编程相关推荐