2017-03-06 7 views
3

Hier ist eine vereinfachte Version meines Codes. Ich versuche, eine Datei zu schreiben mit:Python-Schreibfunktion schreibt nicht den letzten Eintrag

fileName = "missing.csv" 
for x in range (0,5): 
    print(x) 
    saveData = open(fileName, "a") 
    saveData.write(str(x)+'\n') 
    saveData.close 

Die Konsole druckt:

0, 1, 2, 3, 4 

... wie es sollte. Wenn jedoch I missing.csv öffne nur enthält:

0 
1 
2 
3 

NO letzten Eintrag (die 4).

Irgendwelche Ideen? Bitte beraten.

+2

Versuchen Sie '.close()' anstelle von '.close'. Außerdem sehe ich 0 1 2 3 4 in der Textdatei, wenn Sie dies ausführen. – Scovetta

+0

Aghrr. . .dies ist korrekt, füge die() zu .close hinzu. Es gibt auch anspruchsvollere Antworten unten! – scminne

Antwort

5

Wenn Sie Kontext-Manager verwenden, müssen Sie über enge keine Sorge:

fileName = "missing.csv" 
for x in range(0, 5): 
    print(x) 
    with open(fileName, "a") as save_data: 
     save_data.write(str(x) + '\n') 

Und wenn Sie die Datei nicht nach jeder Operation schließen möchten, können Sie öffnen und schließen Sie es nur einmal wie:

fileName = "missing.csv" 
with open(fileName, "a") as save_data: 
    for x in range(0, 5): 
     print(x) 
     save_data.write(str(x) + '\n') 
+2

Sie könnten auch die Schleife in den Kontextmanager einfügen, um die Datei ** einmal ** zu öffnen ... –

+0

Und Sie können auch String-Formatierung verwenden, um die manuelle Umwandlung loszuwerden '' .format() –

+0

@ Dex'ter, Sie an der richtigen Stelle? –

-1

Mit diesem Python-Code ist nichts falsch. Etwas anderes ist falsch.

Löschen Sie missing.csv und versuchen Sie es erneut. Ich vermute, dass 0 1 2 3 von einem vorherigen Durchlauf übrig geblieben sind und missing.csv wird nicht aktualisiert.

Könnte ein Berechtigungsproblem sein. Überprüfen Sie die Dateiberechtigungen, um festzustellen, ob der Benutzer, der das Skript ausführt, über Berechtigungen verfügt. I.E. stellen Sie sicher, dass die Gruppe nicht falsch ist, der Besitzer ist nicht falsch, und die tatsächlichen rwx-Werte sind nicht falsch.

2

Um den Fehler zu vermeiden, die Sie in Ihrem Code vorgenommen (fehlt die ()-.close), könnten Sie einen Kontext-Manager verwenden:

fileName = "missing.csv" 
for x in range (0,5): 
    print(x) 
    with open(fileName, "a") as saveData: 
     saveData.write(str(x)+'\n') 

Es gibt einen impliziten Aufruf von .close() am Ausgang des with.. Blocks.

+1

Die richtige Antwort Antwort oft vertraut. –

2

Keine Notwendigkeit, Datei in Schleife zu öffnen/zu schließen, es einmal zu öffnen und auch einmal zu schließen. Abgesehen davon fehlt Ihnen () von close Funktion.

fileName = "missing.csv" 
saveData = open(fileName, "a") 
saveData.write("\n".join(map(str, range(0,5)))) 
saveData.close() 

Wenn Sie den Kontext bevorzugen.

fileName = "missing.csv" 
with open(fileName, "a") as save_data: 
    save_data.write("\n".join(map(str, range(0,5)))) 
Verwandte Themen