¿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 dewrite(string)
; Si no está presente oNone
, 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, seOSError
unOSError
.
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"))