2012-01-30 17 views
6

El siguiente código, ejecutado en Python 2.7.2 en las ventanas, sólo se lee en una fracción del archivo subyacente:Python: El archivo no lee todo el archivo, io.FileIO lo hace - ¿por qué?

import os 

in_file = open(os.path.join(settings.BASEPATH,'CompanyName.docx')) 
incontent = in_file.read() 
in_file.close() 

mientras que el código funciona bien:

import io 
import os 

in_file = io.FileIO(os.path.join(settings.BASEPATH,'CompanyName.docx')) 
incontent = in_file.read() 
in_file.close() 

Por qué la ¿diferencia? De mi lectura de los documentos, deberían funcionar de manera idéntica.

+0

Podría estar relacionado con la codificación, podría ser que está abriendo el archivo con la configuración predeterminada, abrir() por defecto es simplemente 'r', intente abrir (nombre de archivo, 'rb') para forzar el modo binario. – synthesizerpatel

Respuesta

12

Debe abrir el archivo en modo binario, o el read() se detendrá en el primer carácter EOF que encuentre. Y un docx es un archivo ZIP que está garantizado que contiene dicho carácter en alguna parte.

Trate

in_file = open(os.path.join(settings.BASEPATH,'CompanyName.docx'), "rb") 

FileIO lee raw bytestreams y los que son "binario" por defecto.

+0

¡Guau! ¿Es la causa raíz de esto algo fundamental en la forma en que Windows maneja los archivos? – Marcin

+0

@Marcin es más sobre el formato de archivo docx de MS Word. si solo quieres leer un .txt, 'open()' funcionará bien. –

+3

+1. Como los documentos de Python 2.7, [7.2. * Leer y escribir archivos *], diga: "Python en Windows hace una distinción entre archivos de texto y binarios; los caracteres de fin de línea en los archivos de texto se modifican de forma automática levemente cuando se leen o escriben datos. modificación ... [será] ... datos binarios corruptos como ese en archivos 'JPEG' o' EXE'. Tenga mucho cuidado al usar el modo binario al leer y escribir dichos archivos. En Unix, no hace daño agregar un '' b'' al modo, por lo que puede usarlo de forma independiente para todos los archivos binarios ". –

Cuestiones relacionadas