2010-03-23 4 views
6

Я не могу прочитать файл, и я не понимаю, почему:прочитать бинарный файл (питон)

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

Возвращает: []

Я хотел бы открыть PDF и извлекать каждый байт, и поместите его в список.

Что случилось с моим кодом? :(

Спасибо,

+0

Сколько байтов на самом деле находится в test/test.pdf? –

ответ

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

Вы должны включить псевдо-режим «B» для двоичного файла при чтении и записи на Windows. В противном случае операционная система беззвучно переводит то, что он считает «линия окончаний», в результате чего я/о коррупции.

1

Джонатан правильно, что вы должны открыть файл в двоичном режиме, если вы на окнах.

Однако PDF-файл будет начинаться с «% PDF-», который будет по крайней мере, читайте вне зависимости от того, используете ли вы бинарный режим или нет.

Так что мне кажется, что ваш «тест/test.pdf» пустой файл

0
  • Как лучше всего, как я понимаю, формат PDF, PDF-файл не должен быть двоичным файлом. Это должен быть текстовый файл, который может содержать много двоичных blob. Я могу ошибаться.
  • В Windows, если вы открываете двоичный файл, вам необходимо включить b в режим вашего файла, то есть open(filename, "rb").
    • В Unix-подобных системах b ничего не болит, хотя это ничего не значит.
  • Всегда используйте диспетчер контекста с вашими файлами. То есть вместо того, чтобы писать f = open("test/test.pdf", "rb"), скажем with open("test/test.pdf", "r") as f:. Это гарантирует, что ваш файл всегда закрывается.
  • list(f.read()) вряд ли будет полезным кодом очень часто. f.read() reaurns a str и вызов list на нем делает список символов (однобайтные строки). Это очень редко.
  • Двоичный или текстовый или любой другой, read должен работать. Вы уверены, что есть что-то в test/test.pdf? Python, похоже, не думает, что есть.
0

На какой платформе вы работаете?

Использование Python 2.6 на Windows XP, я получаю:

е = открыт ("14500lf.pdf", "г")
данных = список (f.read())
данные печати
['%', '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', ' '', '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']

на PDF Я случиться, чтобы на моем рабочем столе (его IC Datasheet LTC1450)

Использование «rb» (чтение двоичного кода):

F = открыт ("14500lf.pdf", "RB")
данных = лист (f.read())
данные печати
[ '%', 'Р', '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 ',

.... Вырезать несколько тысяч строк ...

'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 ']

Смежные вопросы