Python 2.7: Imprimir en archivo


97

¿Por qué intentar imprimir directamente en un archivo en lugar de sys.stdoutproducir 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 la 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 formas, tal vez mejores, de escribir en un archivo, pero realmente no entiendo por qué debería ser un error de sintaxis ...

¡Se agradecería una buena explicación!


3
¿Estás seguro? print()es la función incorporada de python 3.x, mientras que el printoperador python <3.x. La publicación muestra 2.7.2+.
Khachik

2
¿Verdad from __future__ import print_function? En Python <3, print es una declaración:
Ari

1
¡No! No lo hice. Por supuesto que tienes razón. Eso resuelve el problema. ¡Maldita sea! Entonces, la impresión documentada en la ayuda ( _builtins_ ) es la versión futura (3.x) de la impresión que tiene una sintaxis diferente. Muchas gracias y tú también, kachik
alex

2
En mi opinión, help(__builtins__)mostrar eso es un error.
Wooble

3
... aunque, investigar más, Python 2.7.2 no tiene una función integrada de impresión, simplemente no puede acceder a él fácilmente normalmente ( __builtins__.__dict__['print'](value, file=f1)funciona, sin embargo).
Wooble

Respuestas:


138

Si desea utilizar la printfunción en Python 2, debe importar desde __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'

72

print es una palabra clave en python 2.X. Debes usar lo siguiente:

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

2
Debe agregar '\ n' para que esto sea equivalente a imprimir.
2018

44

print(args, file=f1)es la sintaxis de Python 3.x. Para el uso 2.x pitón print >> f1, args.


3
Creo que también deberías mencionarlo from __future__ import print_function. Entonces puede usar la notación clara en Python 2 y 3.
Martin Thoma

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

2
Llego AttributeError: 'str' object has no attribute 'write'con su sintaxis python3
Suncatcher

5
@Suncatcher, probablemente esté intentando pasar la cadena que contiene el nombre del archivo como f1 en lugar del objeto de archivo real. Primero debe abrir el archivo para escribir:f1 = open('path_to_your_file', 'w')
citxx

Sí, pensé que debería ser un nombre de archivo, no un objeto de archivo.
Suncatcher

13

Puede exportar la declaración de impresión a un archivo sin cambiar ningún código. Simplemente abra una ventana de terminal y ejecute su código de esta manera:

python yourcode.py >> log.txt

11

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"

es parche de mono?
Sarath Sadasivan Pillai

6

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

Para imprimir en un archivo en Python anterior a 3.0, haría lo siguiente:

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

El >>operador dirige la impresión al archivo f.


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

@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 eso no lo está.
wizzwizz4
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.