leer un archivo binario (python)

No puedo leer un archivo y no entiendo por qué:

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

Devoluciones: []

Me gustaría abrir un PDF, extraer todos los bytes y colocarlo en una lista.

¿Qué pasa con mi código? 🙁

Gracias,

 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 traduce de manera silenciosa lo que considera “terminaciones de línea”, lo que provoca la corrupción de I / O.

Jonathan tiene razón en que debería abrir el archivo en modo binario si está en Windows.

Sin embargo, un archivo PDF comenzará con “% PDF-“, que al menos se leerá independientemente de si está utilizando el modo binario o no.

Entonces me parece que su “test / test.pdf” es un archivo vacío

  • Como mejor 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 sistemas similares a Unix, la b no daña nada, aunque no significa nada.
  • Siempre use un administrador de contexto con sus archivos. Es decir, en lugar de escribir f = open("test/test.pdf", "rb") , digamos with open("test/test.pdf", "r") as f: Esto asegurará que su archivo siempre se cierre.
  • list(f.read()) no es probable que sea un código útil muy a menudo. f.read() devuelve una str y la list llamadas crea una lista de los caracteres (cadenas de un byte). Esto es muy raramente necesario.
  • Binario o texto o lo que sea, la read debería funcionar. ¿Estás seguro de que hay algo en test/test.pdf ? Python no parece pensar que hay.

¿En qué plataforma estás corriendo?

Al usar Python 2.6 en Windows XP, obtengo:

f = abierto (“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 que tengo en mi escritorio (Es una hoja de datos de IC LTC1450 )

Utilizando “rb” (Leer Binario):

f = abierto (“14500lf.pdf”, “rb”)
datos = lista (f.read ())
imprimir datos
[‘%’, ‘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 unos cuantos miles de 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 ‘]