Cómo redirigir la salida de impresión a un archivo TXT

He buscado en Google, Stack Overflow y mi guía de usuarios de Python y no he encontrado una respuesta simple y viable para la pregunta.

Creé un archivo c: \ goat.txt en una máquina con Windows 7 x64 y estoy intentando imprimir “prueba” en el archivo. He intentado lo siguiente en base a los ejemplos proporcionados en StackOverflow:

En este momento no quiero usar el módulo de registro, ya que no entiendo de la documentación para crear un registro simple basado en una condición binaria. Imprimir es simple, sin embargo, cómo redirigir la salida no es obvio.

Un ejemplo simple y claro de que puedo ingresar a mi intérprete es lo más útil.

Además, se agradece cualquier sugerencia de sitios informativos (NO pydocs).

import sys print('test', file=open('C:\\goat.txt', 'w')) #fails print(arg, file=open('fname', 'w')) # above based upon this print>>destination, arg print>> C:\\goat.txt, "test" # Fails based upon the above 

Si está en Python 2.5 o anterior, abra el archivo y luego use el objeto de archivo en su redirección:

 log = open("c:\\goat.txt", "w") print >>log, "test" 

Si estás en Python 2.6 o 2.7, puedes usar imprimir como una función:

 from __future__ import print_function log = open("c:\\goat.txt", "w") print("test", file = log) 

Si está en Python 3.0 o posterior, puede omitir la importación futura.

Si desea redireccionar globalmente sus declaraciones de impresión, puede configurar sys.stdout:

 import sys sys.stdout = open("c:\\goat.txt", "w") print ("test sys.stdout") 

Para redirigir la salida de todas las impresiones, puede hacer esto:

 import sys with open('c:\\goat.txt', 'w') as f: sys.stdout = f print "test" 

Una forma ligeramente más intrincada (que es diferente de las respuestas anteriores, que son todas válidas) sería dirigir la salida a un archivo a través de la consola.

Así que imagina que tienes main.py

 if True: print "hello world" else: print "goodbye world" 

Tu puedes hacer

 python main.py >> text.log 

y luego text.log obtendrá toda la salida.

Esto es útil si ya tiene un montón de declaraciones de impresión y no desea cambiarlas individualmente para imprimirlas en un archivo específico. Simplemente hágalo en el nivel superior y dirija todas las impresiones a un archivo (el único inconveniente es que solo puede imprimir en un solo destino).

Usando el argumento del file en la función de print , puede tener diferentes archivos por impresión:

 print('Redirect output to file', file=open('/tmp/example.log', 'w')) 

Sobre la base de respuestas anteriores, creo que es un caso de uso perfecto para hacerlo (simple) estilo de administrador de contexto:

 import sys class StdoutRedirection: """Standard output redirection context manager""" def __init__(self, path): self._path = path def __enter__(self): sys.stdout = open(self._path, mode="w") return self def __exit__(self, exc_type, exc_val, exc_tb): sys.stdout.close() sys.stdout = sys.__stdout__ 

y entonces:

 with StdoutRedirection("path/to/file"): print("Hello world") 

También sería muy fácil agregar alguna funcionalidad a la clase StdoutRedirection (por ejemplo, un método que le permite cambiar la ruta)

simple en python 3.6

o = open('outfile','w')

print('hello world', file=o)

Estaba buscando algo como lo hice en Perl

my $printname = "outfile"

open($ph, '>', $printname) or die "Could not open file '$printname' $!";

print $ph "hello world\n";

POR FAVOR, NO EDITE ESTAS 2 LÍNEAS DE CÓDIGO SIMPLES y reemplácelas por algo que tenga que usar con … abierto para cada statement de impresión. Eso no sería útil para mí, solo agrega un comentario o una respuesta propia. En mi caso, abrí dos archivos de salida una vez para un archivo de entrada, luego los cerré y abrí de nuevo para un segundo archivo de entrada y volví a recorrer la rutina.

Redirigir sys.stdout a un identificador de archivo abierto y luego toda la salida impresa va a un archivo:

 import sys filename = open("outputfile",'w') sys.stdout = filename print "Anything printed will go to the output file"