2015-11-28 13 views
0

Такое ощущение, что это должно быть очень просто, но я изо всех сил пытаюсь найти решение.CSV в список значений int и count целых чисел

У меня есть CSV файл, полный Интс

9,12,9,12,8,6,10,7,7,15,8,8,7,8,8,10, 10,3,8

все, что я пытаюсь сделать, это прочитать CSV-файл в список int и использовать Counter from Collections для подсчета вхождения каждого int, а затем сохранить эту информацию в файл CSV.

Я попытался

import csv 
from collections import Counter 

with open('/Users/willturner/Desktop/caloHits.csv', 'rb') as f: 
    reader = csv.reader(f) 
    CaloHits = list(reader) 

print Counter(10) 

, чтобы получить число 10 в списке. Но я получаю

->TypeError: «INT» объект не Iterable

Я устал много разных вещей, но havn't имел успех с чем-нибудь.

+3

Вы никогда не используете 'Counter'. Было бы как-то взаимодействовать с «CaloHits», не так ли? – Claudiu

ответ

0

Вы можете сделать это, перейдя по линиям/строкам csv и обновив объект-счетчик каждой строкой.

import csv 
from collections import Counter 

calo_hits = Counter() 
with open('/Users/willturner/Desktop/caloHits.csv') as f: # 'rb' is not necessary 
    reader = csv.reader(f) 
    for row in reader: 
     calo_hits.update([int(n.strip()) for n in row if n.strip()]) 

print calo_hits[10] 
+0

Отлично работает, спасибо – wturner

0

Вы на самом деле не пытаетесь настроить счетчик. Попробуйте это:

import csv 
from collections import Counter 

with open('/Users/willturner/Desktop/caloHits.csv', 'rb') as f: 
    reader = csv.reader(f) 
    calo_hits_counter = Counter(reader) 

print calo_hist_counter[10] 

Хотя, это, вероятно, вернет 0. Причина в том, когда вы загружаете CSV, цифры на самом деле не преобразуются в целые числа.

Чтобы обойти это, вы можете либо проверить количество строк '10', то есть calo_hist_counter['10'].

Или, вы можете конвертировать все данные, загружаемые в целые числа, делая calo_hits_counter = Counter(map(int, reader))

Как и в стороне, если все данные, которые вы загружаете в одной строке, вы на самом деле не нужны накладные библиотека csv, вы могли бы обойтись без нее.

from collections import Counter 

with open('/Users/willturner/Desktop/caloHits.csv', 'rb') as f: 
    reader = f.read() 
    calo_hits_counter = Counter(reader) 
+0

Если файл csv имеет более одной строки, этот код сильно сломается. – dopstar

+0

с использованием метода csv lib, я получаю ошибку трассировки -> 6 calo_hits_counter = Счетчик (считыватель) и TypeError: unhashable type: 'list'. Это проблема на моем конце с python или проблема с кодом? – wturner

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