2013-03-05 134 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