2012-03-26 7 views
0
def main(): 

    total = 0.0 
    length = 0.0 
    average = 0.0 

    try: 
     #Get the name of a file 
     filename = input('Enter a file name: ') 

     #Open the file 
     infile = open(filename, 'r') 

     #Read the file's contents 
     contents = infile.read() 

     #Display the file's contents 
     print(contents) 

     #Read values from file and compute average 
     for line in infile: 
      amount = float(line) 
      total += amount 
      length = length + 1 

     average = total/length 

     #Close the file 
     infile.close() 

     #Print the amount of numbers in file and average 
     print('There were ', length, ' numbers in the file.') 
     print(format(average, ',.2f')) 

    except IOError: 
     print('An error occurred trying to read the file.') 

    except ValueError: 
     print('Non-numeric data found in the file') 

    except: 
     print('An error has occurred') 


main() 

Dies ist, wie die Zahlen in meiner .txt-Datei angezeigt:Berechnung des Durchschnitts von Zahlen in TXT-Datei mit Python

78 
65 
99 
88 
100 
96 
76 

Ich erhalte „Ein Fehler ist aufgetreten“, wenn ich zu laufen versuchen. Nachdem ich das kommentiert habe, bekomme ich einen Teilbarkeitsfehler. Ich habe versucht, nur die Summe und die Länge auszudrucken, um zu sehen, ob sie tatsächlich rechnen, aber jeder ist 0.0, also habe ich anscheinend einige Probleme, sie richtig anzusammeln.

+0

Wenn Sie herausfinden wollen, was schief gelaufen ist, versuchen Sie zuerst ** nicht ** die Ausnahme abfangen, so dass Sie die Traceback sehen können. –

Antwort

2

infile.read() verbraucht die Datei. Erwäge, jede Zeile so zu schreiben, wie du sie stattdessen findest.

2

infile.read() wird die gesamte Datei, nicht einzelne Teile. Wenn Sie einzelne Portionen haben wollen, müssen Sie sie aufteilen (durch Leerzeichen) und den Whitespace loswerden (das ist \n).

Obligatorische Einzeiler:

contents = infile.read().strip().split() 

würden Sie dann über den Inhalt contents iterieren wollen, so dass die einzige Sache wert iterieren wäre. infile ist bereits erschöpft, und nachfolgende Aufrufe an read() werden eine leere Zeichenfolge generieren.

for num in contents: 
    amount = float(num) 
    # more code here 

average = total/len(contents) # you can use the builtin len() method to get the length of contents instead of counting yourself 
+1

Der Code iteriert bereits ordnungsgemäß über die Zeilen in der Datei. es muss nur vermeiden, die Datei an erster Stelle zu konsumieren. –

0

Ich änderte Sie Code, um zu sehen, ob ich es arbeiten lassen könnte und immer noch so wie Ihr wie möglich aussehen. Dies ist, was ich mit:

def main(): 

total = 0.0 
length = 0.0 
average = 0.0 

    try: 
     #Get the name of a file 
     filename = raw_input('Enter a file name: ') 

     #Open the file 
     infile = open(filename, 'r') 

     #Read values from file and compute average 
     for line in infile: 
      print line.rstrip("\n") 
      amount = float(line.rstrip("\n")) 
      total += amount 
      length = length + 1 


     average = total/length 

     #Close the file 
     infile.close() 

     #Print the amount of numbers in file and average 
     print 'There were', length, 'numbers in the file.' 
     print format(average, ',.2f') 

    except IOError: 
     print 'An error occurred trying to read the file.' 

    except ValueError: 
     print 'Non-numeric data found in the file' 

    except: 
     print('An error has occurred') 

main() 
Verwandte Themen