2013-09-09 2 views
1

Say мой файл CSV, как:Объединить и обобщающие подобные данные CSV

  • любовь, как, 200
  • любовь, как, 50
  • говорят, утверждают, 30

где числа означают подсчет этих слов, совместно встречающихся в разных контекстах.

Я хочу совместить подсчеты подобных слов. Поэтому я хочу, чтобы вывести что-то вроде:

  • любви, как, 250
  • говорят, утверждают, 30

Я искал вокруг, но мне кажется, что я застрял с этой простой вопрос.

+1

Можете ли вы включить точный образец из CSV? Что вы уже пробовали? Есть ли у вас пример кода, на который мы можем смотреть? –

ответ

1

Не видя точного CSV, его трудно узнать, что подходит. В приведенном ниже коде предполагается, что последний токен - это счетчик, и он соответствует всем значениям до последней запятой.

# You'd need to replace the below with the appropriate code to open your file 
file = """love, like, 200 
love, like, 50 
love, 20 
say, claim, 30""" 
file = file.split("\n") 

words = {} 
for line in file: 
    word,count=line.rsplit(",",1) # Note this uses String.rsplit() NOT String.split() 
    words[word] = words.get(word,0) + int(count) 
for word in words: 
    print word,": ",words[word] 

и выводит:

say, claim : 30 
love : 20 
love, like : 250 
1

В зависимости от того, что именно ваше приложение, я думаю, что я бы на самом деле рекомендую использовать счетчик здесь. Counter - это модуль коллекций python, который позволяет вам отслеживать, сколько всего есть. Например, в вашей ситуации вы можете просто обновить объект-счетчик.

, например:

from collections import Counter 

with open("your_file.txt", "rb") as source: 
    counter = Counter() 
    for line in source: 
     entry, count = line.rsplit(",", 1) 
     counter[entry] += int(count) 

В этот момент вы можете либо записать данные обратно в CSV или просто продолжать использовать его.

Смежные вопросы