Wie schreibe ich in modernem Python eine Zeile in eine Datei? Ich habe gehört, dass dies veraltet ist:
print >>f, "hallo"
Funktioniert "\n"
auf allen Plattformen oder sollte ich "\r\n"
auf Windows verwenden?
Wie schreibe ich in modernem Python eine Zeile in eine Datei? Ich habe gehört, dass dies veraltet ist:
print >>f, "hallo"
Funktioniert "\n"
auf allen Plattformen oder sollte ich "\r\n"
auf Windows verwenden?
Da andere bereits erklärt haben, wie es gemacht wird, werde ich erklären, wie es Zeile für Zeile passiert.
with FileOpenerCM('file.txt') as fp: # entspricht "with open('file.txt') as fp:"
fp.write('dummy text')
dies ist ein sogenannter Kontext-Manager
, alles, was in einem with
-Block steht, ist ein Kontext-Manager. Lassen Sie uns also sehen, wie das unter der Oberfläche passiert.
class FileOpenerCM:
def __init__(self, file, mode='w'):
self.file = open(file, mode)
def __enter__(self):
return self.file
def __exit__(self, exc_type, exc_value, exc_traceback):
self.file.close()
Die erste Methode __init__
ist (wie Sie alle wissen) die Initialisierungsmethode eines Objekts. Immer wenn ein Objekt erstellt wird, wird obj.__init__
definitiv aufgerufen. Und das ist der Ort, an dem Sie Ihren gesamten Initialisierungscode platzieren.
Die zweite Methode __enter__
ist etwas interessant. Einige von Ihnen haben sie vielleicht nicht gesehen, weil es eine spezifische Methode für Kontext-Manager ist. Was sie zurückgibt, ist der Wert, der der Variablen nach dem as
-Schlüsselwort zugewiesen werden soll. In unserem Fall fp
.
Die letzte Methode ist die Methode, die nach dem Erfassen eines Fehlers oder dem Verlassen des with
-Blocks ausgeführt wird. Die Variablen exc_type
, exc_value
, exc_traceback
sind die Variablen, die die Werte der Fehler halten, die im with
-Block aufgetreten sind. Zum Beispiel,
exc_type: TypeError
exc_value: unsupported operand type(s) for +: 'int' and 'str
exc_traceback:
Aus den ersten beiden Variablen können Sie genügend Informationen über den Fehler erhalten. Ehrlich gesagt kenne ich den Verwendungszweck der dritten Variablen nicht, aber für mich reichen die ersten beiden aus. Wenn Sie mehr über Kontext-Manager recherchieren möchten, können Sie das sicher tun, und beachten Sie, dass das Schreiben von Klassen nicht der einzige Weg ist, um Kontext-Manager zu schreiben. Mit contextlib können Sie Kontext-Manager auch über Funktionen (eigentlich Generatoren) schreiben. Es liegt ganz bei Ihnen, sich das anzusehen. Sie können sicherlich Generatorfunktionen mit contextlib ausprobieren, aber meiner Meinung nach sind Klassen viel sauberer.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.