在python中的for循环中将行写入csv文件

时间:2015-05-29 15:34:29

标签: python loops csv for-loop writer

我有一个大约有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)

2 个答案:

答案 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循环中。

感谢您的回答

干杯