我有一个带有数据矩阵的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' ]
因此,每次我的代码运行时,都会添加一个额外的'列出'。
我需要做些什么来保持字符串列表的初始格式?我想是因为我用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\']""]']"
答案 0 :(得分:1)
csv Reader用于逐行解析文件,并为每个文件返回一个列表。 如果我们有一个像:
这样的文件header1|header2
1| A
2| B
当我们使用" |"解析此csv文件时字符作为分隔符,我们得到:
[['header1', 'header2'], ['1', 'A'], ['2', 'B']]
这正是我们在这种情况下应该期待的。但是,如果我们用其他字符作为分隔符解析它,我们仍然会得到:
[['header1|header2'], ['1| A'], ['2| B']]
这就是你正在做的事情,因为你的csv阅读器已准备好期待&#34 ;;"的分隔符,而你的实际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