three-six-oh
three-six-oh

Reputation: 47

Calculating average of numbers in a file

So what I have to do is figure out how to ask a user for a a text file and output the average of all the numbers. By tinkering around I have figured out how to find the average of a list i made but not sure how to do a list that the user give me. This is what I have right now:

with open('average', 'wt') as myFile:
    myFile.write('3\n')
    myFile.write('45\n')
    myFile.write('83\n')
    myFile.write('21\n')

with open('average', 'rt') as myFile:
    total, n = 0, 0
    for line in myFile:
        total += int(line)
        n += 1
    print(float(total) / n)

Upvotes: 0

Views: 2672

Answers (2)

FuzzyBunnySlippers
FuzzyBunnySlippers

Reputation: 3397

Something like this?

import string

fileName = raw_input("What file name: ")
lines = []
try:
    file = open(fileName)
    lines = file.readlines()
    file.close()
except:
    print "Unable to open file"
sum = 0
values = 0
if(len(lines) > 0):
    for line in lines:
        value = 0
        try:
            value = int(string.strip(line))
        except ValueError:
            pass
        if(value != 0):
            sum = sum + value
            values += 1
    print "Average = %f for %d lines, sum = %f"%(sum/values,values,sum)
else:
    print "No lines in the file"

NOTE: This assumes one number per line. It will not count blank lines or lines that have text. Other than that, junk on the lines or a bad file should not cause an exception, etc.

This was the test file (there are blank lines):

10
20
30
40
50
23
5



asdfadfs

s

And the output:

What file name: numbers.txt
Average = 25.000000 for 7 lines, sum = 178.000000

Upvotes: 0

Hyperboreus
Hyperboreus

Reputation: 32429

Supposing that there is one number on each line of the file:

with open(input('Filename: '), 'r') as f:
    numbers = [int(a.strip()) for a in f]
print('Average is {}'.format(sum(numbers)/len(numbers)))

Upvotes: 2

Related Questions