2012-02-16 32 views
78

¿Por qué tratar de imprimir directamente a un archivo en lugar de sys.stdout producir el error siguiente sintaxis:Python 2.7: Imprimir en un archivo

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 ayuda (__ 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 las escrituras de impresión de flujo estándar?

Sé que hay diferentes tal vez mejores formas de escribir en el archivo, pero realmente no entiendo por qué esto debe ser un error de sintaxis ...

Una explicación agradable sería apreciada!

+3

¿Seguro? 'print()' es la función incorporada de python 3.x, mientras que 'print' es el operador de python <3.x. La publicación muestra '2.7.2 +'. – khachik

+2

¿'de __future__ import print_function'? En Python <3, imprimir es una declaración: – Ari

+1

¡No! No lo hice. Por supuesto que tienes razón Eso resuelve el problema. ¡Maldición! Entonces la impresión documentada en ayuda (\ __ builtins__) es la versión futura (3.x) de la impresión que tiene una sintaxis diferente. Muchas gracias y usted también, kachik – alex

Respuesta

117

Si desea utilizar la función print en Python 2, usted tiene que importar de __future__:

from __future__ import print_function 

Pero se puede tener el mismo efecto sin necesidad de utilizar la función, también:

print >>f1, 'This is a test' 
50

imprimir es una palabra clave en python 2.X. Se debe utilizar la siguiente:

f1=open('./testfile', 'w+') 
f1.write('This is a test') 
f1.close() 
26

print(args, file=f1) se muestra la sintaxis de Python 3.x. Para el uso de python 2.x print >> f1, args.

+3

Creo que también debería mencionar 'from __future__ import print_function'. Luego puede usar la notación clara en ambos, Python 2 y 3. –

+0

@moose, ya hay una excelente respuesta de Gandaro, que incluye mi respuesta y tu nota. – citxx

+0

Obtengo 'AttributeError: el objeto 'str' no tiene ningún atributo 'write'' con su sintaxis de python3 – Suncatcher

6

En Python 3.0+, print es una función , que llamaría con print(...). En una versión anterior, print es una declaración , que haría con print ....

Para imprimir a un archivo en Python anterior a la 3.0, que haría:

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

El operador >> dirige imprimir en el archivo f.

+0

Me gustaría imprimir una matriz completa en el archivo. Si utilizo su código, solo se imprimieron la cabeza y la cola de la matriz, como la salida de la terminal. ¿Cómo imprimir todas las líneas de matriz en el archivo? – Sigur

+0

@Sigur "Me gusta la salida de la terminal" Lo siento, pero el error está en otra parte. No le está diciendo a Python que imprima todo, por lo que no es así. – wizzwizz4

11

Puede exportar la declaración de impresión a un archivo sin cambiar ningún código. Basta con abrir una ventana de terminal y ejecute el código de esta manera:

python yourcode.py >> log.txt 
2

Esto redireccionará la impresión a un archivo

import sys 
sys.stdout = open("file.xt", "w+") 
print "this line will redirect to file.txt"