2013-03-05 3 views
0

У меня есть файл CSV, который имеет данные следующим образомОбработка файла 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" 

И я хочу, чтобы объединить 2-й столбец, если первый столбец похожи, остальная часть значения не имеют значения.

Итак, в примере оба значения /file/Puppies и /file/Puppies/pup в столбце 2 будут добавлены вместе в конечном выходе.

По аналогичным вопросам я имею в виду, что, например, /file/Puppies/, /file/Puppies/1, /file/Puppies/ru все были бы похожими. но/file/Kittens не будет.

Любые идеи о том, как начать работу?

+1

Определить «комбинированный»? Чего вы ожидаете от своей продукции? И что вы уже пробовали? Вы видели, что есть модуль '' csv' (http://docs.python.org/2/library/csv.html)? –

+1

Может также определить «аналогичный». –

+0

аналогично в этом случае, что первые два слова в слэшах будут совпадать с –

ответ

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

Вы не должны заглатывать имена переменных (что еще хуже, если вы называете их «Класс», которых они не являются). Верхний регистр зарезервирован по соглашению для реальных классов Python. –