Суммировать столбец csv в python

Я пытаюсь сделать сумму столбца в csv-файле. Файл выглядит так:

Date  Value
2012-11-20  12
2012-11-21  10
2012-11-22  3

Это может быть в диапазоне нескольких сотен строк. Мне нужно получить общее значение (в этом случае это будет 25), напечатанное на терминале. У меня до сих пор есть код, но он приводит к гораздо меньшей цифре, чем она должна суммироваться. При устранении неполадок я сделал печать суммы и понял, что вместо суммирования 12 + 10 + 3, он фактически разбивает числа в каждом столбце и суммирует как 1 + 2 + 1 + 0 + 3 что, очевидно, равно гораздо меньшему итогу. Вот мой код, если бы кто-то мог сделать рекомендацию, было бы здорово!

with open("file.csv")) as fin:
  headerline = fin.next()
  total = 0
  for row in csv.reader(fin):
    print col # for troubleshooting
    for col in row[1]:
      total += int(col)
  print total

1 ответов


на csv модуль петли над строками один за другим, нет необходимости затем цикл над столбцом. Всего в сумме int(row[1]):

with open("file.csv") as fin:
    headerline = fin.next()
    total = 0
    for row in csv.reader(fin):
        total += int(row[1])
    print total

вы можете использовать ярлык с выражением генератор и sum() встроенные функции:

with open("file.csv") as fin:
    fin.next()
    total = sum(int(r[1]) for r in csv.reader(fin))

обратите внимание, что в Python строки также являются последовательностями, поэтому, когда вы делаете for col in row[1]: вы зацикливаетесь на отдельных символах row[1]; так что для вашего первого ряда это будет 1 и 2:

>>> for c in '123':
...     print repr(c)
...
'1'
'2'
'3'