Python: Nein csv.close ()?
Bin ich mit dem CSV-Modul zu Lesen, eine Registerkarte getrennte Datei. Code unter:
z = csv.reader(open('/home/rv/ncbi-blast-2.2.23+/db/output.blast'), delimiter='\t')
Aber wenn ich Z. close() am Ende von meinem script, das ich bekommen und die Fehlermeldung "csv.reader' Objekt hat kein Attribut 'schließen'"
z.close()
Also wie schließe ich die "Z"?
InformationsquelleAutor der Frage Harpal | 2010-07-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Leser ist eigentlich nur ein parser. Wenn Sie danach Fragen, für eine Zeile von Daten, delegiert er Lestat auf die zugrunde liegenden
file
Objekt und nur konvertiert das Ergebnis in eine Reihe von Feldern. So gibt es keine Notwendigkeit, schließen Sie den reader; es wäre eine sinnlose operation.Stellen Sie sicher, schließen Sie die zugrunde liegenden
file
Objekt, obwohl. In Python 2.5+, hier ist der Weg, das zu tun:Wenn Sie nicht vertraut mit der
- Anweisunges im Grunde umschließt seinen Inhalt in eine
try...finally
- block, der die Datei schließt in derfinally
Teil. Für Python 2.5 müssen Sie eine__future__
importieren, aktivieren Sie diewith
- Anweisung. Wenn Sie auf die Wahrung der Kompatibilität mit früheren Versionen von Python 2.4 wie sollten Sie schließen sich mittry...finally
.Dank Jared für den Hinweis auf Kompatibilitätsprobleme mit der
with
- Anweisung.InformationsquelleAutor der Antwort David Z
Du nicht in der Nähe CSV-Leser direkt; stattdessen sollten Sie schließen Sie alle Datei-ähnliches Objekt verwendet wird. Zum Beispiel, in Ihrem Fall, würden Sie sagen:
Wenn Sie eine aktuelle version von Python, können Sie mithilfe der with-Anweisung, z.B.
Dies hat den Vorteil, dass
f
wird auch dann geschlossen, wenn Sie eine Ausnahme werfen oder sonst Rückgabe innerhalb der with-block, in der Erwägung, dass ein solcher Fall würde dazu führen, dass die Datei geöffnet bleibt in dem vorherigen Beispiel. In anderen Worten, es ist im Grunde äquivalent zu einem try/finally-block, z.B.InformationsquelleAutor der Antwort Eli Courtwright
Du nicht schließen, das Ergebnis der
reader()
Methode, Sie schließen das Ergebnis deropen()
Methode. So verwenden Sie zwei Aussagen:foo=open(...); bar=csv.reader(foo)
. Dann können Sie anrufenfoo.close()
.Gibt es keine bonus-Punkte vergeben, für die dies in einer Zeile, die mehr lesbar und funktional in die zwei.
InformationsquelleAutor der Antwort Bryan Oakley