Вы уже поглотил файл итератор с line = file.read()
так что вы не итерация ничего. Вы должны забыть read
и перебрать сам файл объекта:
with open("inputs.txt", "r") as f:
count = sum(line.count(",") for line in f)
# f.seek(0)
# use the lines again
Если вы хотите получить указатель обратно в начало, чтобы перебирать снова вы могли f.seek(0)
, но я не уверен, что total = sum(int(num) for num in line.strip(',').split(','))
делает.
После того, как вы называете .read или .readlines вы должны переместить указатель на конец файла, так что если вы не f.seek(0)
вы не можете перебрать все строки снова, вы в основном делает:
In [8]: iterator = iter((1,2,3))
In [9]: list(iterator) # consume
Out[9]: [1, 2, 3]
In [10]: list(iterator) # empty
Out[10]: []
In [11]: list(iterator).count(1)
Out[11]: 0
Если вы есть разделенный запятыми файл с целыми числами, вы можете использовать модуль CSV, длина строк даст вам количество того, как может, элементов и отображения строки в Интс и суммировать все значения строки:
import csv
with open("inputs.txt") as f:
r = csv.reader(f) # create rows split on commas
sm = 0
com_count = 0
for row in r:
com_count += len(row) # "1,2,3"
sm += sum(map(int,row))
Было бы на самом деле будет sm += sum(map(int,row)) -1
совпадают с запятой, но если вы хотите, чтобы количество элементов подсчитывало запятые, это не правильный подход "1,2,3".count(",") == 2
, но есть три элемента.
Ну, это работает, не так ли? Если ему нужно что-то лучше, он может использовать что-то лучше, но это простой способ получить информацию, которую он просил. Конечно, это не самый лучший способ или оптимизирован, но мы говорим о python здесь, язык, который не был легким или быстрым, но был простым для понимания. – Njord