我有一个大约有5000行的大型csv文件。 第一列包含每行的识别名称,即LHGZZ01前9行有LHGZZ01作为名称,下10行有其他等等。 没有这样的模式所以我使用np.unique来查找名称更改的索引。
我想编写一个循环,它会将源csv的每一行写入新的csv文件,只在循环中包含相同的名称。
fp = new FloatingPane({
title: "Test",
resizable: true,
dockable: false,
style: "position:absolute;top:0;left:0;width:100px;height:100px;visibility:hidden;",
id: "fp"
}, dojo.byId("fp"));
fp.addChild(d);
fp.startup();
上面的代码写入新csv的第一行并停止。
我的问题是如何遍历source.csv文件,在每次更改新名称后拆分数据,然后将具有相同行名的行写入唯一的csv?
为长篇大论的问题道歉,但不幸的是,这个问题超出了我的python技能,让我疯狂。
非常感谢任何帮助或建议
示例csv:
datafile = open('source.csv','rb')
reader = csv.reader(datafile)
data = []
idx = []
dataidx = []
next(reader, None)#skip headers
for row in reader:
d = row[0]
idx.append(d)
data.append(row)
dataidx.append(row[0])
index =np.sort(np.unique(idx,return_index=True)[1])
nme = []#list of unique names
for row in index:
nm = data[row][0]
nme.append(nm)
for i in np.arange(0,9):
with open(str(out_dir)+str(nme[0])+'.csv','w') as f1:
row = data[i]
writer=csv.writer(f1, delimiter=',')#lineterminator='\n',
writer.writerow(row)
答案 0 :(得分:3)
每次以w
模式打开文件时,它都会覆盖那里的所有内容。您应该打开文件一次,然后循环调用writerow
,如:
with open(str(out_dir)+str(nme[0])+'.csv','w') as f1:
writer=csv.writer(f1, delimiter=',')#lineterminator='\n',
for i in np.arange(0,9):
row = data[i]
writer.writerow(row)
而不是每次迭代通过for
循环
答案 1 :(得分:0)
刚刚完成上述问题。
通过使用w属性打开/写入我需要的所有csv文件,我解决了我的问题(不是很优雅)。然后使用a属性将每个csv文件追加到第二个for循环中。
感谢您的回答
干杯