2014-12-22 43 views
0

我有一个数据矩阵的csv文件。当最初的csv文件在记事本中打开它看起来像这样:如何使用csv模块添加列?

“AAA,15.0” “BBB,45.0” “CCC,60.0”

那么我想处理这些数据,加入另一列得到格式化的东西如下:

“AAA,15.0,50.0” “BBB,45.0,30.0” “CCC,60.0,20.0”

所以....... 我打开原始文件转化为Python使用:

with open((FilePath"/XXX.csv"), 'rt') as csvfile: 
    NewData = list(csv.reader(csvfile, delimiter=';')) 

print(NewData) 

我第一次做这样的代码产生的字符串(这我其实很高兴 - 我想这个格式)的列表...

[“AAA,15.0,50.0”,' BBB,45.0,30.0' , 'CCC,60.0,20.0']

但随后下一次我尝试添加一列我结束了....

[ 'AAA,15.0,50.0' ],['BBB,45.0,30.0'],['CCC,60.0,20.0']]

因此,每次我的代码运行时,它都会增加一层'li刺'。

我需要做些什么来保持字符串列表的初始格式?我想这是因为我用list()命令打开文件。我应该使用什么?


进一步细节要求.........

蒸馏这进一步...我的代码...

import csv 

FilePathSB="C:/Users/" 

with open((FilePathSB+"/Master.csv"), 'rt') as csvfile: 

    xMatrix = list(csv.reader(csvfile, delimiter=';')) 

####Do something to the data like add another column of numbers              

#SaveAs same file 

with open(FilePathSB+"/Master.csv", "w") as output: 
    writer=csv.writer(output,lineterminator='\n') 
    for val in xMatrix: 
     writer.writerow([val]) 

注意,有一些数据操纵这是在文件打开时发生的,但这不会影响我所遇到的问题,因此我已将代码保留了出来。

打开文件,然后保存它,每次代码运行时都会添加一层“列表”。我希望格式保持不变(即尽管打开然后重新保存,我希望数据格式与下面显示的初始矩阵相同)。

因此,代码运行时,它第一次打开的初始CSV数据:

"AAA,24:17" 
"BBB,21:18" 
"CCC,16:40" 

和变化并将其作为格式:

"['AAA,24:17']" 
"['BBB,21:18']" 
"['CCC,16:40']" 

如果我再次运行该代码需要此数据并将其更改为:

"[""['AAA,24:17']""]" 
"[""['BBB,21:18']""]" 
"[""['CCC,16:40']""]" 

如果我再次运行它,我结束了:

"['[""[\'AAA,24:17\']""]']" 
"['[""[\'BBB,21:18\']""]']" 
"['[""[\'CCC,16:40\']""]']" 
+2

我想我们还需要看看您如何写入文件。 – Kevin

+0

我很困惑你的意思是“下一次”。代码中没有循环,所以这只会运行一次。也不清楚你是什么“添加一列”,或如何。文件?列表?确保你向我们展示了所有相关的代码。 – Brionius

+0

我想我们都可以同意我们需要查看代码的其他相关部分(或者至少代表它们的示例代码) – jamylak

回答

1

csv Reader是为了逐行解析文件,并为每个文件返回一个列表。 如果我们有像文件:

header1|header2 
     1|  A 
     2|  B 

当我们解析使用这个CSV文件“|”作为分隔符,我们会得到:

[['header1', 'header2'], ['1', 'A'], ['2', 'B']] 

这正是我们应该在这种情况下期望。然而,如果我们有一些其他的字符作为分隔符解析的话,我们还是得到:

[['header1|header2'], ['1| A'], ['2| B']] 

这是你在做什么,因为您的CSV读者引到期望的分隔符“;”,而你的实际csv有(显然)是“,”的分隔符。

在使用阅读器阅读您的csv后,您将拥有一个列表列表,其中每个内部列表代表一行。把它看成是这样看:

[ 
row1, 
row2, 
row3 
] 

,每一行的样子:

[cell1, cell2, cell3] 

如果你想一个新的列添加到每一行,你必须遍历所有的行:

for current_row in rows: 
    # use current row here 

并使用列表的.append()方法添加新列。

current_row.append('new_value') 

最后,您可以使用csv.writer将行写入另一个文件。请参阅csv.writerows