2010-07-15 23 views
6

estoy tratando de copiar los archivos dentro de un script Python usando el siguiente código:Copia de archivos con Python en Windows

inf,outf = open(ifn,"r"), open(ofn,"w") 
outf.write(inf.read()) 
inf.close() 
outf.close() 

Esto funciona perfectamente unedr OSX (y otras versiones de UNIX sospecho), pero falla en Windows. Básicamente, la llamada a read() devuelve muchos menos bytes que el tamaño del archivo real (que tienen una longitud de alrededor de 10 KB), lo que provoca que la escritura trunque el archivo de salida.

La descripción del método read() dice que "Si el argumento size es negativo u omitido, lea todos los datos hasta que se alcance EOF", así que espero que el código anterior funcione en cualquier entorno, teniendo Python protegiendo mi código Rasgos del OS.

Entonces, ¿cuál es el punto? Ahora, recurrí a shutil.copyfile, que se adapta a mis necesidades, y funciona. Estoy usando Python 2.6.5

Gracias a todos.

+1

Si se trata de archivos binarios, debe abrirlos con "rb" y "wb" ya que esto hace una diferencia en Windows. No estoy seguro de si esto podría causar este problema. –

+0

No entiendo lo que quieres decir, Wayne. Acepté una respuesta, la respuesta de Nathon para ser más específico. –

Respuesta

3

shutil es una forma mejor de copiar archivos de todos modos, pero necesita abrir archivos binarios en modo binario en Windows. Importa allí. open(fname, 'rb')

+0

Siempre me pregunté qué diablos haría la bit binaria: la he usado y no la he usado, y nunca podría notar la diferencia. Y ahora lo sé. –

+0

¡OMG! ¡Esa maldita bandera binaria! ¡Maldita Win32 :) y me avergüenzan! –

Cuestiones relacionadas