Dirigiendo la salida de impresión a un archivo .txt en Python 3

¿Hay alguna manera de guardar todos los resultados de impresión en un archivo txt en python? Digamos que tengo estas dos líneas en mi código y quiero guardar la salida de impresión en un archivo llamado output.txt .

 print ("Hello stackoverflow!") print ("I have a question.") 

Quiero que el archivo output.txt contenga

 Hello stackoverflow! I have a question. 

Dale a print un argumento de palabra clave de file , donde el valor del argumento es una secuencia de archivos. Podemos crear un flujo de archivos usando la función de open :

 print("Hello stackoverflow!", file=open("output.txt", "a")) print("I have a question.", file=open("output.txt", "a")) 

De la documentación de Python sobre la print :

El argumento del file debe ser un objeto con un método de write(string) ; Si no está presente o None , se utilizará sys.stdout .

Y la documentación para open :

Abra el file y devuelva un objeto de archivo correspondiente. Si el archivo no se puede abrir, se OSError un OSError .

La "a" como segundo argumento de open significa “agregar”, en otras palabras, el contenido existente del archivo no se sobrescribirá. Si desea que el archivo se sobrescriba, use "w" .


Sin embargo, abrir un archivo con open muchas veces no es ideal para el rendimiento. Lo ideal sería abrirlo una vez y nombrarlo, luego pasar esa variable a print opción de file print . ¡Debes recordar cerrar el archivo después!

 f = open("output.txt", "a") print("Hello stackoverflow!", file=f) print("I have a question.", file=f) f.close() 

También hay un atajo sintáctico para esto, que es el bloque with . Esto cerrará su archivo al final del bloque para usted:

 with open("output.txt", "a") as f: print("Hello stackoverflow!", file=f) print("I have a question.", file=f) 

Puede redireccionar stdout a un archivo “output.txt”:

 import sys sys.stdout = open('output.txt','wt') print ("Hello stackoverflow!") print ("I have a question.") 

Usa el módulo de registro.

 def init_logging(): rootLogger = logging.getLogger('my_logger') LOG_DIR = os.getcwd() + '/' + 'logs' if not os.path.exists(LOG_DIR): os.makedirs(LOG_DIR) fileHandler = logging.FileHandler("{0}/{1}.log".format(LOG_DIR, "g2")) rootLogger.addHandler(fileHandler) rootLogger.setLevel(logging.DEBUG) consoleHandler = logging.StreamHandler() rootLogger.addHandler(consoleHandler) return rootLogger 

Obtener el registrador:

 logger = init_logging() 

Y comenzar el registro / salida (ing):

 logger.debug('Hi! :)') 

Uno puede almacenar directamente el resultado devuelto de una función en un archivo.

  print(output statement, file=open("filename", "a"))