2013-03-05 119 views
0

结合我有下列方式处理CSV文件和值蟒蛇

"/file/Puppies";"$2,166.74";"2,502";"5.55%";"$48.10";"152,844";"45,044" 
"/file/Kittens";"$1,498.59";"1,618";"3.54%";"$32.75";"157,560";"45,764" 
"/file/Puppies/pup";"$1,174.92";"1,451";"3.72%";"$30.10";"116,268";"39,038" 

有数据的CSV文件,我想将第2列,如果第一列类似,对其余的结合价值观并不重要。

因此,在该示例中,第2列中的/file/Puppies/file/Puppies/pup值都将在最终输出中一起添加。

相似地,我的意思是说,例如/file/Puppies//file/Puppies/1/file/Puppies/ru都是相似的。但/文件/小猫不会。

关于如何开始任何想法?

+1

定义“合并”?你期望你的输出是什么?你自己尝试过甚么?你有没有看到['csv'模块](http://docs.python.org/2/library/csv.html)? – 2013-03-05 20:28:01

+1

也可能要定义'相似'。 – 2013-03-05 20:31:49

+0

在这种情况下,在斜线的前两个单词将匹配 – 2013-03-05 21:06:01

回答

0

构建字典来保存值,然后添加到每个字典值,每行

Values = {} 
from csv import reader 
with open('CSVFile.csv', 'r') as filehandle : 
    reader = reader(filehandle,delimiter=';') 
    for row in reader : 
     Class = row[0].split('/')[2] 
     Value = float(row[1].strip('$').replace(',', '')) 
     if Class in Values : 
      Values[Class] = Values[Class] + Value 
     else : 
      Values[Class] = Value 
print Values 

在这里,我做你的意思是“相似”什么一些简化的假设 - 即,我假设你的意思是'/ file /'后面的第一个字符,并且直到该字段结尾或下一个'/'结束。这就是我所说的Class

然后,我觉得从您的数据取第二列,剥去“$”,移除逗号,并转换为浮动值。

然后,因为我们正在构建一个字典,我们来测试一下我们是否已经看到了小狗,或什么的。如果是这样,只需添加到以前的值;如果不是,请设置该值。

+1

你不应该大写变量名(更糟糕的是,当你称它们为'Class'时,它们不是)。按照惯例,大写字母保留在实际的Python类中。 – 2013-03-05 21:50:13