Python 2.7: In Datei drucken

97

Warum wird versucht, direkt in eine Datei zu drucken, anstatt sys.stdoutden folgenden Syntaxfehler zu erzeugen:

Python 2.7.2+ (default, Oct  4 2011, 20:06:09)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> f1=open('./testfile', 'w+')
>>> print('This is a test', file=f1)
  File "<stdin>", line 1
    print('This is a test', file=f1)
                            ^
SyntaxError: invalid syntax

Von der Hilfe (__ builtins__) habe ich folgende Infos:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout)

    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file: a file-like object (stream); defaults to the current sys.stdout.
    sep:  string inserted between values, default a space.
    end:  string appended after the last value, default a newline.

Was wäre also die richtige Syntax, um die Standard-Stream-Print-Schreibvorgänge zu ändern?

Ich weiß, dass es verschiedene, vielleicht bessere Möglichkeiten gibt, in eine Datei zu schreiben, aber ich verstehe wirklich nicht, warum dies ein Syntaxfehler sein sollte ...

Eine nette Erklärung wäre dankbar!

Alex
quelle
3
Bist du sicher? print()ist die in Python 3.x integrierte Funktion, während der printOperator Python <3.x ist. Der Beitrag zeigt 2.7.2+.
Khachik
2
Hast du from __future__ import print_function? In Python <3 ist print eine Aussage:
Ari
1
Nein! Ich habe nicht. Natürlich hast du recht. Das löst das Problem. Teufel noch mal! Der dokumentierte Druck in der Hilfe (_ builtins_ ) ist also die zukünftige (3.x) Version des Drucks, die eine andere Syntax hat. Vielen Dank und auch Sie, Kachik
alex
2
IMO, das überhaupt help(__builtins__)anzuzeigen ist ein Fehler.
Wooble
3
... obwohl Python 2.7.2 bei weiteren Untersuchungen über eine integrierte Druckfunktion verfügt, können Sie normal nicht einfach darauf zugreifen ( __builtins__.__dict__['print'](value, file=f1)funktioniert jedoch).
Wooble

Antworten:

138

Wenn Sie die printFunktion in Python 2 verwenden möchten , müssen Sie Folgendes importieren __future__:

from __future__ import print_function

Sie können den gleichen Effekt aber auch ohne Verwendung der Funktion erzielen:

print >>f1, 'This is a test'
Gandaro
quelle
72

print ist ein Schlüsselwort in Python 2.X. Sie sollten Folgendes verwenden:

f1=open('./testfile', 'w+')
f1.write('This is a test')
f1.close()
Simon Bergot
quelle
2
Sie müssen '\ n' hinzufügen, damit dies dem Druck entspricht.
4.
44

print(args, file=f1)ist die Python 3.x-Syntax. Für Python 2.x verwenden print >> f1, args.

citxx
quelle
3
Ich denke, Sie sollten auch erwähnen from __future__ import print_function. Dann können Sie die klare Notation in Python 2 und 3 verwenden.
Martin Thoma
@moose, es gibt bereits eine ausgezeichnete Antwort von Gandaro, die meine Antwort und Ihre Notiz enthält.
Citxx
2
Ich bekomme AttributeError: 'str' object has no attribute 'write'mit Ihrer Python3-Syntax
Suncatcher
5
@Suncatcher, Sie versuchen wahrscheinlich, eine Zeichenfolge mit dem Dateinamen als f1 anstelle des eigentlichen Dateiobjekts zu übergeben. Sie müssen zuerst die Datei zum Schreiben öffnen:f1 = open('path_to_your_file', 'w')
citxx
Ja, ich dachte, es sollte ein Dateiname sein, kein Dateiobjekt.
Suncatcher
13

Sie können die Druckanweisung in eine Datei exportieren, ohne den Code zu ändern. Öffnen Sie einfach ein Terminalfenster und führen Sie Ihren Code folgendermaßen aus:

python yourcode.py >> log.txt
Dunkler Mond
quelle
11

Dadurch wird Ihre Druckausgabe in eine Datei umgeleitet:

import sys
sys.stdout = open("file.txt", "w+")
print "this line will redirect to file.txt"
Daoctor
quelle
ist es Affen Patching?
Sarath Sadasivan Pillai
6

In Python 3.0+ printist eine Funktion , mit der Sie aufrufen würden print(...). In einer früheren Version printist eine Aussage , mit der Sie machen würden print ....

Um in eine Datei in Python vor 3.0 zu drucken, gehen Sie wie folgt vor:

print >> f, 'what ever %d', i

Der >>Bediener leitet den Druck in die Datei f.

Nam Nguyen
quelle
Ich möchte ein ganzes Array in die Datei drucken. Wenn ich Ihren Code verwende, wurde nur der Kopf und das Ende des Arrays gedruckt, wie die Ausgabe vom Terminal. Wie drucke ich alle Array-Zeilen in die Datei?
Sigur
@Sigur "Wie die Ausgabe vom Terminal" Sorry, aber der Fehler ist woanders. Sie sagen Python nicht, dass er das Ganze drucken soll, weshalb dies nicht der Fall ist.
wizzwizz4