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 oNone
,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, usefile.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)