Probleme mit Progressbar

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Smuun
User
Beiträge: 16
Registriert: Montag 12. Januar 2015, 13:43

Hallo an Alle.

Ich habe ein Problem. Ich habe mir einen Code geschrieben um Dateien anzupassen.
Der sieht so aus:

Code: Alles auswählen

import csv

output = csv.writer(open('/home/test/output.asc', 'wb'))

with open('/home/test/test.asc', 'rb') as in_data:
        for row in data:
            value = float(row[2])
            if value > 1000000:
                row[2] = value - 1000000
                row[2] = round(row[2], 2)
            output.writerow(row)
Das funktioniert soweit auch wunderbar. Dann wollte ich eine ProgressBar einfügen, da die Dateien die ich bearbeite sehr groß sind.
Der Code dafür sieht dann so aus:

Code: Alles auswählen

import csv
import pyprind

output = csv.writer(open('/home/test/output.asc', 'wb'))
     
with open('/home/test/test.asc', 'rb') as in_data:
       data = csv.reader(in_data, delimiter =" ")
       progress_range = len(in_data.readlines())
       progress_bar = pyprind.ProgBar(progress_range)
       for i in range(progress_range): 
           for row in data:
               value = float(row[2])
               if value > 1000000:
                   row[2] = value - 1000000
                   row[2] = round(row[2], 2)
               output.writerow(row)
           progress_bar.update()
Es wird auch die output.asc Datei erstellt aber nichts rein geschrieben.
Könnt ihr mir weiterhelfen? Ich finde einfach meinen Fehler nicht.

Vielen Dank schonmal im Vorraus.

Beste Grüße

Simon
Zuletzt geändert von Anonymous am Freitag 8. Januar 2016, 09:58, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
BlackJack

Der Fehler ist das Du um die Anzahl der Zeilen in der Datei zu bestimmen, bereits die gesamte Datei liest und damit dann jeder folgende Versuch aus dieser geöffneten und bis zu Ende gelesenen Datei zu lesen nichts liefert.

Da die Datei sowieso in den Arbeitsspeicher passt, denn Du liest sie ja komplett ein, solltest Du das nicht nur zum ermitteln der Anzahl der Zeilen verwenden, sondern dann über die bereits gelesenen Zeilen iterieren statt nochmal über die Datei.
Smuun
User
Beiträge: 16
Registriert: Montag 12. Januar 2015, 13:43

Super! Vielen Dank.
Da hätte ich auch selbst drauf kommen können :oops:
Antworten