2015-06-29 2 views
2

Я пытаюсь подсчитать запятые между записями в текстовом файле, поэтому я могу использовать количество запятых, чтобы найти количество записей, чтобы найти среднее значение. К сожалению, это связано с отправкой нуля.Python для подсчета запятых в текстовом файле

file = open("inputs.txt", "r") 

    line = file.read() 

    commaCount = 0 

    for line in file: 
     for char in line: 
      if char == ',': 
       commaCount+=1 

    commacount2 = (multiply(commaCount,2)) 

    total = sum(int(num) for num in line.strip(',').split(',')) 

    print(commaCount) 
    print(commacount2) 

    print("Your average for all inputs is" + str(divide(total,commacount2))) 

ответ

3

Вы уже поглотил файл итератор с 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, но есть три элемента.

1

Это должно помочь вам приступить к работе. Оно должно дать вам количество запятых в текстовом файле. Если вы используете цикл, вы можете использовать его для всех файлов, которые у вас есть.

with open('inputs.txt', 'r') as f: 
    numCommas = f.read().count(',') 
    print numCommas 
+0

Ну, это работает, не так ли? Если ему нужно что-то лучше, он может использовать что-то лучше, но это простой способ получить информацию, которую он просил. Конечно, это не самый лучший способ или оптимизирован, но мы говорим о python здесь, язык, который не был легким или быстрым, но был простым для понимания. – Njord