Python 2.7: imprimir en archivos
-
26-10-2019 - |
Pregunta
¿Por qué intentar imprimir directamente en un archivo en lugar de sys.stdout
Producir el siguiente error de sintaxis:
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
De Help (__ Builtins__) Tengo la siguiente información:
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.
Entonces, ¿cuál sería la sintaxis correcta para cambiar la impresión de transmisión estándar a las que escribe?
Sé que hay diferentes formas diferentes de escribir en el archivo, pero realmente no entiendo por qué esto debería ser un error de sintaxis ...
¡Una buena explicación sería apreciada!
Solución
Si quieres usar el print
función en python 2, debes importar de __future__
:
from __future__ import print_function
Pero también puede tener el mismo efecto sin usar la función:
print >>f1, 'This is a test'
Otros consejos
La impresión es una palabra clave en Python 2.x. Debe usar lo siguiente:
f1=open('./testfile', 'w+')
f1.write('This is a test')
f1.close()
print(args, file=f1)
es la sintaxis Python 3.x. Para python 2.x use print >> f1, args
.
Puede exportar la declaración de impresión al archivo sin cambiar ningún código. Simplemente abra un terminal Windows y ejecute su código de esta manera:
python yourcode.py >> log.txt
Esto redirigirá su salida de 'impresión' a un archivo:
import sys
sys.stdout = open("file.txt", "w+")
print "this line will redirect to file.txt"
En Python 3.0+, print
es un función, que llamarías con print(...)
. En la versión anterior, print
es un declaración, que harías con print ...
.
Para imprimir en un archivo en Python antes de 3.0, lo haría:
print >> f, 'what ever %d', i
los >>
El operador dirige la impresión al archivo f
.