2010-03-23 42 views
6

No puedo leer un archivo, y yo no entiendo por qué:leer un archivo binario (pitón)

f = open("test/test.pdf", "r") 
data = list(f.read()) 
print data 

Devuelve: []

me gustaría abrir un PDF, y extraer cada bytes, y ponerlo en una lista.

¿Qué pasa con mi código? :(

Gracias,

+0

¿Cuántos bytes hay realmente en test/test.pdf? –

Respuesta

10
f = open("test/test.pdf", "rb") 

Debe incluir el pseudo-modo "b" para binario al leer y escribir en Windows. De lo contrario, el sistema operativo se traduce en silencio lo que considera que son "los finales de línea", causando i/o corrupción.

1

Jonathan es correcto que usted debe abrir el archivo en modo binario si está en windows.

Sin embargo, un archivo PDF se iniciará con "% PDF-", lo que, al menos, ser leído independientemente de si está utilizando el modo binario o no.

Por lo tanto, me parece que su "prueba/test.pdf" es un archivo vacío

0
  • Como mejor que yo entiendo el formato PDF, un archivo PDF no debe ser un archivo binario. Debe ser un archivo de texto que puede contener muchos blobs binarios. Podría estar equivocado.
  • En Windows, si está abriendo un archivo binario, debe incluir b en el modo de su archivo, es decir, open(filename, "rb").
    • En los sistemas de tipo Unix, el b no duele nada, aunque no significa nada.
  • Utilice siempre un administrador de contexto con sus archivos. Es decir, en lugar de escribir f = open("test/test.pdf", "rb"), diga with open("test/test.pdf", "r") as f:. Esto asegurará que su archivo siempre se cierre.
  • list(f.read()) es probable que no sea un código útil muy a menudo. f.read() reafns un str y llamando al list en él hace una lista de los caracteres (cadenas de un byte). Esto es muy pocas veces necesario.
  • Binario o texto o lo que sea, read debería funcionar. ¿Está seguro de que hay algo en test/test.pdf? Python no parece pensar que exista.
0

¿En qué plataforma se está ejecutando?

usando Python 2.6 en Windows XP, consigo:

f = open ("14500lf.pdf", "r")
datos = lista (f.read())
imprimir datos
['%', 'P', 'D', 'F', '-', '1', '.',' 5 ',' \ r ','% ',' \ xe2 ',' \ xe3 ',' \ xcf ',' \ xd3 ',' \ n ',' 1 ',' ',' 0 ' , '', 'o', 'b', 'j', '<', '<', '/', 'C', 'o', 'n', 't', 'e', ​​'n ',' t ',' s ',' ',' 3 ',' ',' 0 ',' ',' R ','/',' T ',' y ',' p ',' e ' , '/', 'P', 'a', 'g', 'e', ​​'/', 'P', 'a', 'r', 'e', ​​'n', 't', ' ',' 8 ',' 7 ',' ',' 0 ',' ',' R ','/',' T ',' h ',' u ',' m ',' b ',' ' , '7', '1', '', '0', '', 'R', '/', 'R', 'o', 't', 'a', 't', 'e' , '', '0', '/', 'M', 'e', ​​'d', 'i', 'a', 'B', 'o', 'x', '[', '0 ',' ',' 0 ',' ',' 6 ',' 1 ',' 2 ',' ',' 7 ',' 9 ',' 2 ','] ','/',' C ' , 'r', 'o', 'p', 'B', 'o', 'x', '[', '0', '', '0', '', '6', '1' , '2', '', '7', '9', '2', ']', '/', 'R', 'e', ​​'s', 'o', 'u', ' r ',' c ',' e ',' s ',' ',' 2 ',' ',' 0 ',' ',' R ','> ','> ',' \ r ',' e ',' n ',' d ',' o ',' b ',' j ',' \ r ',' 2 ',' ',' 0 ',' ',' o ',' b ', 'j', '<', '<', '/', 'C', 'o', 'l', 'o', 'r', 'S', 'p', 'a', 'c ',' e ',' < ',' < ','/',' D ',' e ',' f ',' a ',' u ',' l ',' t ',' R ',' G ',' B ' , '', '1', '0', '0', '', '0', '', 'R', '>', '>', '/', 'F', 'o', 'n', 't', '<', '<', '/', 'F', '5', '', '9', '6', '', '0', '', ' R ','/',' F ',' 7 ',' ',' 9 ',' 7 ',' ',' 0 ',' ',' R ','/',' F ',' 9 ',' ',' 1 ',' 0 ',' 6 ',' ',' 0 ',' ',' R ','/',' F ',' 1 ',' 1 ',' ', '1', '0', '7', '', '0', '', 'R', '/', 'F', '1', '4', '', '1', ' 1 ',' 1 ',' ',' 0 ',' ',' R ','/',' F ',' 1 ',' 6 ',' ',' 1 ',' 1 ',' 6 ',' ',' 0 ',' ',' R ','/',' F ',' 1 ',' 7 ',' ', ' 1 ',' 1 ',' 7 ',' ' , '0', '', 'R', '/', 'F', '1', '3', '', '1', '1', '2', '', '0', '', 'R', '>', '>', '/', 'P', 'r', 'o', 'c', 'S', 'e', ​​'t', '[' , '/', 'P', 'D', 'F', '/', 'T', 'e', ​​'x', 't', ']', '>', '>', ' \ r ',' e ',' n ',' d ',' o ',' b ',' j ',' \ r ',' 3 ',' ',' 0 ',' ',' o ' , 'b', 'j', '<', '<', '/', 'L', 'e' , 'n', 'g', 't', 'h', '', '4', '', '0', '', 'R', '/', 'F', 'i', 'l', 't', 'e', ​​'r', '/', 'F', 'l', 'a', 't', 'e', ​​'D', 'e', ​​'c ',' o ',' d ',' e ','> ','> ',' s ',' t ',' r ',' e ',' a ',' m ',' \ n ' , 'H', '\ x89', '\ xa4', 'W', '\ xd9', 'r', 'T', '\ xc9', '\ x11', '\ xfd', '\ x82 ',' \ xfb ',' \ x0f ',' \ xf5 ',' \ xd8 ',' \ n ',' \ x8f ',' \ x8a ',' \ xda ',' \ x97 ',' G ', '', '\ x04', '\ x06', '\ x03']

en un PDF Resulta que tengo en mi escritorio (Es un IC Hoja de datos LTC1450)

Usando "rb" (lectura binaria):

f = open ("14500lf.pdf", "rb")
datos = lista (f.read())
datos de impresión
[ '%', 'P', 'D', 'F', '-', '1', '.', '5', '\ r', '%', '\ xe2', '\ xe3', '\ xcf', '\ xd3 ',' \ r ',' \ n ',' 1 ',' ',' 0 ',' ',' o ',' b ',' j ',' < ',' < ','/' , 'C', 'o', 'n', 't', 'e', ​​'n', 't', 's', '', '3', '', '0', '', 'R', '/', 'T', 'y', 'p', 'e', ​​'/', 'P', 'a', 'g', 'e', ​​'/', 'P ',' a ',' r ',' e ',' n ',' t ',' ',' 8 ',' 7 ',' ',' 0 ',' ',' R ','/' , 'T', 'h', 'u', 'm', 'b', '', '7', '1', '', '0', '', 'R', '/' , 'R', 'o', 't', 'a ',' t ',' e ',' ',' 0 ','/',' M ',' e ',' d ',' i ',' a ',' B ',' o ',' x ',' [',' 0 ',' ',' 0 ',' ',' 6 ',' 1 ',' 2 ',' ',' 7 ',' 9 ',' 2 ','] ','/',' C ',' r ',' o ',' p ',' B ',' o ',' x ',' [',' 0 ',' ',' 0 ',' ',' 6 ',' 1 ',' 2 ',' ',' 7 ',' 9 ',' 2 ','] ','/',' R ',' e ',' s ',' o ',' u ',' r ',' c ',' e ',' s ',' ',' 2 ',' ',' 0 ',' ',' R ','> ','> ',' \ r ',' e ',

.... Corta unas cuantas líneas ...

'9', '1', '', '0', '', 'R', '/', 'I', 'D', '[', '<', 'd', 'd', '3', 'd', '2', '8', '5', 'e', ​​'1', 'd', '9', '0', '4', ' 6 ',' e ',' 1 ',' f ',' 6 ',' e ',' 7 ',' 0 ',' 8 ',' b ',' d ',' 8 ',' e ' , '4', 'f', '9', 'b', '1', '3', '>', '<', '4', '3', '8', 'a', ' 7, 7, 2, 3, f, b, 2, 9, e, 7, 4, 6, a , '4', 'd', '4', '1', '6', 'a', 'f', '7', '6', '2', 'd', '8', ' 0 ',' 9 ',' 5 ','> ','] ','> ','> ',' \ r ',' \ n ',' s ',' t ',' a ',' r ',' t ',' x ',' r ',' e ',' f ',' \ r ',' \ n ',' 2 ',' 9 ',' 0 ',' 2 ',' 6 ',' 9 ',' \ r ',' \ n ','% ','% ',' E ',' O ',' F ',' \ r ',' \ n ']

Cuestiones relacionadas