2016-07-01 17 views
1

Ich schrieb eine einfache Funktion, um eine Datei Zeile für Zeile zu lesen, eine Berechnung durchzuführen und die Ergebnisse in einer anderen Datei zu speichern. Wenn ich jedoch count in meiner Funktion ausgabe, anstelle von 0, 1, 2, 3; es wird 6.21263888889e-05, 0.000141933611111 usw. Ich frage mich, was der Grund ist.Integer in Python inkrementieren

def CumulativePerSecond(input_file): 
    # Record cumulative battery per second 
    freq = 1000 # number of samples per second 
    output_file = os.path.splitext(input_file)[0] + "_1s" + ".txt" 
    output = open(output_file, 'a+') 
    count = 0 
    for line2 in fileinput.input(input_file): 
    count = count + 1 
    print count 
    if count == freq: 
     output.write(str(line2)) 
     count = 0 
    output.close() 

Teile der Ausgabe:

1.87317876361 

1.87321708889 

1.87325520083 

1.87329356889 

1.87333199389 

1.87337076056 

1.87340823167 

1.87344365278 

1.87347473167 

1.87351439528 

1.87354390806 

1.87362505778 
+0

Haben Sie versucht, Typumwandlung als int (d. H. 'Count = int (count + 1)')? –

+0

Kannst du auch mehr Zahlen in der Serie posten, die ein wenig mehr Informationen darüber liefern, was den Fehler erzeugt. –

+0

Außerdem ist Ihr Hauptziel, einfach eine Datei mit jedem 1000sten Datenpunkt aus der Eingabe auszugeben. Das könnte viel einfacher geschrieben werden und Sie brauchen vielleicht überhaupt nicht zu zählen. –

Antwort

1

Ich weiß nicht, die Besonderheiten Ihrer Anwendung, aber ich würde die Daten in eine Liste, und verwenden Sie dann in Scheiben schneiden Notation Python schicken jedes 1000. Daten auszuwählen Punkt.

Probieren Sie das folgende Snippet aus.

data = range(100) 
every_tenth = data[::10] 

Sie können aber auch die Notwendigkeit, explizit schließen Dateien beseitigen, wenn Sie die with Schlüsselwort verwenden.

with open(filename) as f: 
    data = f.readlines() 

Im folgenden ist der Code neu geschrieben mehr ‚Pythonically‘ - das heißt, nutzt sie einige der Verknüpfungen, die Python Sie über C. anbietet Sie können mit ihm Geige ein wenig zu bekommen es zu laufen. Ich bin mir nicht sicher, wie Sie mit Ihren Dateien umgehen.

def CumulativePerSecond(filename, freq=1000): 
    data = [] 
    with open(filename) as input_file: 
     data = input_file.readlines() 

    output_file = os.path.splitext(filename)[0] + "_1s.txt" 
    with open(out_filename, 'a+') as output: 
     for line in data[::freq]: 
      output.write(line) 
+1

Danke, es funktioniert! – ZigZagZebra