按照

2014-09-10 46 views
-1

在csv文件中填充一行这里是我想用python更新的一个csv文件。 它有3列:按照

col1 = [1,2,3,4,5,6,7,8,9,10] 
col2 = [A, A, A, B, C, C, C, C, A, A] 
col3 = [] 

对于COL3每个细胞,我想填补一个ID号,将改变的COL2变化的内容,只有当。

在我的例子,我会得到col3 = [1,1,1,2,3,3,3,3,4,4]

任何人给我的方法是什么?

+3

“只有当COL2的内容改变”你是什​​么意思? 'col1'的作用是什么? – 2014-09-10 14:20:35

+0

你可以在你的问题中更精确吗?你问“我如何填写col3'数组?”或者你问“如何将数组写入CSV文件?” – 2014-09-10 14:23:35

+0

哦,是的标题是不完整的......它应该是“根据另一行的内容在一个csv文件中填充一行” – Kerplouz 2014-09-10 14:26:41

回答

2

在Python 3:

from itertools import groupby 
from operator import itemgetter 
import csv 

with open('f1.csv', newline='') as f_in, open('f2.csv', 'w', newline='') as f_out: 
    reader = csv.reader(f_in) 
    writer = csv.writer(f_out) 
    for i, (key, group) in enumerate(groupby(reader, key=itemgetter(1)), start=1): 
     for row in group: 
      writer.writerow(row + [i]) 

如果使用Python 2.7,使用的语句改为

with open('f1.csv', 'rb') as f_in, open('f2.csv', 'wb') as f_out: 
+0

嗨史蒂文,thx快回答:使用相同的示例csv文件我得到一个“文件”C:\路径\ script.py“,第8行,在 为我,(键,组)在枚举(groupby(reader,key = itemgetter 1)),start = 1): IndexError:列表索引超出范围“ – Kerplouz 2014-09-10 14:43:07

+0

@Kerplouz:这意味着您的输入文件中有空行。有时文件末尾的额外换行符是空行的来源。也有可能你有一个单一的项目。如果您的分隔符不是逗号,您也可以获得单个项目行。对于其他分隔符,请执行'reader = csv.reader(f_in,delimiter ='\ t')#或其他分隔符。 – 2014-09-10 14:47:27

+0

伙计,非常感谢,它完美的作品!除了我忘了复制标题... :)但我应该能够管理它们。我知道这是一个愚蠢的/初学者的问题,但我刚开始学习编程,同时我需要它的工作... – Kerplouz 2014-09-10 14:57:53