Saltar al contenido

¿Cómo redirigir la salida de ‘impresión’ a un archivo usando Python?

Solución:

La forma más obvia de hacer esto sería imprimir en un objeto de archivo:

with open('out.txt', 'w') as f:
    print >> f, 'Filename:', filename     # Python 2.x
    print('Filename:', filename, file=f)  # Python 3.x

Sin embargo, redirigir stdout también funciona para mí. Probablemente esté bien para un script único como este:

import sys

orig_stdout = sys.stdout
f = open('out.txt', 'w')
sys.stdout = f

for i in range(2):
    print('i = ', i)

sys.stdout = orig_stdout
f.close()

Desde Python 3.4, hay un administrador de contexto simple disponible para hacer esto en la biblioteca estándar:

from contextlib import redirect_stdout

with open('out.txt', 'w') as f:
    with redirect_stdout(f):
        print('data')

Redirigir externamente desde el propio shell es otra opción y, a menudo, preferible:

./script.py > out.txt

Otras preguntas:

¿Cuál es el primer nombre de archivo en su secuencia de comandos? No lo veo inicializado.

Mi primera suposición es que glob no encuentra ningún archivo bam y, por lo tanto, el bucle for no se ejecuta. Verifique que la carpeta exista e imprima bamfiles en su secuencia de comandos.

Además, use os.path.join y os.path.basename para manipular rutas y nombres de archivos.

Puede redirigir la impresión con el >> operador.

f = open(filename,'w')
print >>f, 'whatever'     # Python 2.x
print('whatever', file=f) # Python 3.x

En la mayoría de los casos, es mejor escribir en el archivo normalmente.

f.write('whatever')

o, si tiene varios elementos que desea escribir con espacios entre, como print:

f.write(' '.join(('whatever', str(var2), 'etc')))

Referencia de la API de Python 2 o Python 3:

print(*objects, sep=' ', end='n', file=sys.stdout, flush=False)

los expediente El argumento debe ser un objeto con un write(string) método; si no está presente o None, sys.stdout se utilizará. Dado que los argumentos impresos se convierten en cadenas de texto, print() no se puede utilizar con objetos de archivo en modo binario. Para estos, use file.write(...) en lugar de.

Dado que el objeto de archivo normalmente contiene write() método, todo lo que necesita hacer es pasar un objeto de archivo a su argumento.

Escribir / sobrescribir en archivo

with open('file.txt', 'w') as f:
    print('hello world', file=f)

Escribir / adjuntar a archivo

with open('file.txt', 'a') as f:
    print('hello world', file=f)
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *