2017-07-04 2 views
0

Kurzversion: Die Anzahl der Zeilen in den Eingabe- und Ausgabedateien ist nicht gleich. Ich verstehe nicht warum, weil ich keine Zeilen addiere oder subtrahiere, d. H. Die Eingabedatei hat 12327 Zeilen, aber die Ausgabe hat nur 11903.Einfaches Python-Skript. Eingabe und Ausgabe stimmen nicht überein

Ich kann anscheinend keinen Fehler mit meinem Code finden. Ich hatte gehofft, jemand mit mehr Erfahrung könnte? Vielen Dank.

Ausführliche Version: Ich habe ein einfaches Python-Skript, bestehend aus 3 Funktionen.

Funktion 1 nimmt eine Liste von Zahlen aus einer .txt-Datei (Infile), konvertiert sie alle in Floats und ändert alle negativen Zahlen in 0. Sie fügt sie dann zu einer Liste (Originalliste) hinzu. Jedes Element dieser Liste wird dann in eine Ausgabedatei gedruckt. Es teilt Ihnen auch die Anzahl der Zeilen in der Eingabedatei mit.

Funktion 2 prüft im Wesentlichen die Anzahl der Zeilen in der Ausgabedatei.

Funktion 3 läuft nur Funktionen 1 und 2

Die Eingabedatei hat 12.327 Zeilen, während die Ausgabedatei nur 11903.

ich eine andere Eingabedatei das Skript zu testen gemacht. Diese .txt-Eingabedatei enthält 10 Zeilen, von denen einige negative Zahlen sind. Die Ausgabedatei ist jedoch vollständig leer.

Ich verstehe nicht, warum die Eingabe und Ausgabe Anzahl der Zeilen unterschiedlich sind? Ich habe den folgenden Code eingefügt.

Ich würde mich über jeden Hinweis freuen. Vielen Dank.

Antwort

2

Ein Problem ist, dass Sie nie Ihre Ausgabedatei schließen, so dass nichts ordnungsgemäß an sie gesendet wird. Sie müssen sich um Ihre Dateien kümmern: Wenn Sie sie öffnen, schließen Sie sie ordnungsgemäß. Sie schließen Ihre Eingabedatei auch nicht, obwohl Sie die daraus resultierenden Probleme nicht sehen.

Ersetzen Sie Ihre Funktion mit

def thelist(): #FUNCTION 1 
    original_list = [] 
    for line in infile: 
     newline = float(line) 
     if newline < 0: 
      newline = 0 
     original_list.append(newline) 
    print('The input file has', len(original_list), 'lines.') 
    for element in original_list: 
     print(element, file = outfile) 
    infile.close() 
    outfile.close() 

Beachten Sie die beiden enge Funktionen am Ende. Dies kümmert sich um Ihr Problem in meinen Tests, obwohl Sie andere Probleme mit Ihrer Dateiverarbeitung haben, die Probleme verursachen könnten. Ich schlage vor, Sie betrachten die tutorial on file handling, um eine bessere Dateiverwaltung zu lernen.

+0

Hallo Rory. Danke für Ihre Hilfe. Ich lerne immer noch Python, also ist es im Moment langsam. Ich werde auf jeden Fall das Tutorial zur Dateiverwaltung lesen. – ScientistEngineer

0

Ich kann einige Zeilen nicht zu outfile.txt bis zum Zeitpunkt der zweiten Methode outfile.txt vollständig gelesen, und findet es leer. Dies liegt daran, dass die Schreiboperation nicht abgeschlossen wird. Wie in der vorherigen Antwort von Rory vorgeschlagen, wird vorgeschlagen, die Dateien nach der Verwendung zu schließen, um eine ordnungsgemäße Handhabung der Dateien zu gewährleisten. Auch die Verwendung von flush(), um ausstehende Schreiboperationen abzuschließen, hilft hier.

Bitte verwenden Sie unten main() für korrekte Ergebnisse.

def main(): #FUNCTION 3 
    thelist() 
    infile.flush() 
    outfile.flush() 
    outfilelinenumber() 
    infile.flush() 
    outfile.flush() 
    print('\n', '*** Finished ***') 

dies die Ausgabe mit war:

The input file has 13 lines. 
The output file has 13 lines. 

    *** Finished *** 
+0

Hallo Ramakanth. Ich bin noch nicht auf die .flush() Methode gestoßen, also werde ich damit herumspielen. Danke, dass Sie sich mein Skript und den Vorschlag angeschaut haben. – ScientistEngineer

Verwandte Themen