1370 Stimmen

Richtiger Weg, um eine Zeile in eine Datei zu schreiben?

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?

0voto

Abhishek Kumar Punkte 303

Eine sehr einfache Möglichkeit, Zeilen in Python in eine Textdatei zu schreiben. Dies überschreibt eine Datei mit demselben Namen, falls vorhanden.

%%writefile test.txt
 ich schreibe dies in die Datei test.txt \n
 auch diese Zeile schreibe ich

-2voto

Hyperx837 Punkte 608

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.com

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.

Powered by:

X