2010-04-04 12 views
14

Wenn wir eine neue Zeile in eine Datei haben wir Code schreiben müssen:Warum hat Python keine writeln() Methode?

file_output.write('Fooo line \n') 

Gibt es irgendwelche Gründe, warum Python nicht eine writeln() Methode?

+7

Umdrehen Sie die Frage: Warum verwenden einige Sprachen verschiedene Funktionen für die Ausgabe abhängig davon, ob Sie eine Endlinie Pause oder nicht? Das reicht zumindest bis Pascal, das ich schon früh gelernt habe, aber ich bevorzuge die explizite Darstellung auf Zeilenumbrüchen in der Ausgabe. – dmckee

+0

Sie können [diese Antwort] (http://stackoverflow.com/a/16085543/910963) aus einem anderen Beitrag heraus überprüfen, wenn Sie es brauchen – SimplyKnownAsG

Antwort

8

Es wurde eine symmetrische Schnittstelle der file Verfahren bereitzustellen, weggelassen, und weil ein writeln() keinen Sinn machen würde :

  • read() Streichhölzer write() : Sie arbeiten beide auf Rohdaten
  • readlines() Matches writelines(): sie arbeiten beide auf den Leitungen einschließlich ihrer EOLs
  • readline() selten verwendet wird; ein Iterator macht die gleiche Arbeit (mit Ausnahme des optionalen size param)

A writeline() (oder writeln()) würde im Wesentlichen die gleiche wie write() sein, da es keine EOL hinzufügen würde (das Verhalten von writelines() entsprechen) .

Der beste Weg, um ein print in eine Datei zu imitieren ist die spezielle Print-to-Datei Syntax von Python 2.x oder das file Schlüsselwort Argument der print() Funktion zu nutzen, wie Daniel vorgeschlagen.

Persönlich bevorzuge ich die print >>file, ... Syntax über file.write('...\n').

+2

@eftinis, da 'readline' existiert, ist Ihre Aussage von" Symmetrie "nicht wirklich gültig. Die seltene Verwendung einer "readline" -Methode schließt auch ihren Vorteil in bestimmten Situationen nicht aus (zum Beispiel Parser, die eine oder zwei Zeilen vorauslesen müssen). – SimplyKnownAsG

0

Wahrscheinlich kein wirklicher Grund, nur dass es wirklich einfach ist, eine neue Zeile zu schreiben, wenn Sie sie brauchen, warum also die Dateischnittstelle mit einer extra Methode überladen, nur um das zu tun?

+0

Verwenden Sie normalerweise die in meiner Frage verwendete Syntax? – systempuntoout

+0

Pythons 'print'-Funktion druckt standardmäßig eine neue Zeile am Ende des Strings. –

+1

Um Ihre rhetorische Frage zu beantworten: Effizienz. Betrachte (1) 'f.write (stuff); f.write ('\ n') (2) 'f.write (stuff + '\ n')' (3) 'f.writeln (stuff)' –

19

In Python 2, Verwendung:

print >>file_output, 'Fooo line ' 

In Python 3, zu verwenden:

print('Fooo line ', file=file_output) 
+0

Danke für die Hinweise – systempuntoout

2

print() ist die Funktion, die Sie suchen. Wie bei einem Großteil des Kernpolymorphismus in Python wird das Drucken durch eine eingebaute Funktion anstelle von Methoden bereitgestellt (genau wie len(), next(), repr() usw.!).

Die print()-Funktion, die die universelle Schnittstelle ist, macht es auch vielseitiger, ohne dass die Dateiobjekte selbst es implementieren müssen. In diesem Fall wird standardmäßig durch Newline beendet, aber es kann zum Beispiel in dem Funktionsaufruf, gewählt werden:

print("text", file=sys.stderr, end="\n") 

in Ihrem vorgeschlagenen Anwendungsfall wird alle Dateiobjekte müssen nicht nur eine .write() Methode implementieren (jetzt verwendet von print()), aber auch .writeln(), und vielleicht noch mehr! Dieser funktionsbasierte Polymorphismus macht Python sehr reich, ohne die Schnittstellen zu belasten (erinnern Sie sich, wie Ente-Typisierung funktioniert).

Hinweis: Dieses Modell war schon immer das Zentrum von Python.Es ist nur reiner in meinen Beispielen, die sich auf Python 3 beziehen

2

Ich fühle, dass es sollte. Die nächste Sache, die Sie verwenden können, ist:

Verwandte Themen