считайте двоичный файл (Python)

Я не могу считать файл, и я не понимаю почему:

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

Возвраты: []

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

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

Спасибо,

7
задан Jonathan Feinberg 23 March 2010 в 01:48
поделиться

4 ответа

  • Насколько я понимаю формат pdf, файл pdf не должен быть двоичным файлом. Это должен быть текстовый файл, который может содержать множество двоичных двоичных объектов. Я могу ошибаться.
  • В Windows, если вы открываете двоичный файл, вам необходимо включить b в режим вашего файла, то есть open (имя файла, «rb») . {{ 1}}
    • В Unix-подобных системах b ничего не повредит, хотя и ничего не значит.
  • Всегда используйте диспетчер контекста для своих файлов. То есть вместо записи f = open ("test / test.pdf", "rb") , скажем с open ("test / test.pdf", "r") как f: . Это гарантирует, что ваш файл всегда будет закрыт.
  • list (f.read ()) вряд ли будет полезным кодом очень часто. f.read () повторно вызывает str и, вызывая list , создает список символов (однобайтовые строки). Это требуется очень редко.
  • Двоичный код, текст или что-то еще, читать должно работать. Вы уверены, что в test / test.pdf есть что-нибудь? Python, похоже, не думает, что есть.
0
ответ дан 6 December 2019 в 21:11
поделиться
f = open("test/test.pdf", "rb")

Вы должны включать псевдорежим "b" для двоичного кода при чтении и записи в Windows. В противном случае ОС молча переводит то, что она считает "концами строк", вызывая повреждения ввода-вывода.

11
ответ дан 6 December 2019 в 21:11
поделиться

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

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

Таким образом, мне кажется, что ваш "test/test.pdf" - это пустой файл

1
ответ дан 6 December 2019 в 21:11
поделиться

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

Используя python 2.6 на Windows XP, я получаю:

f = open("14500lf.pdf", "r")
. данные = list(f.read())
print data
['%', 'P', 'D', 'F', '-', '1', '. ', '5', '\r', '%', '\2', '\3', '\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', '>', '>', '\', 'e', 'n', 'd', 'o', 'b', 'j', '\', '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', 'l', '0', 'r', 'S', 'p', 'a', 'c', 'e', '<', '/', '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', '2', ' ', '0', ' ' ', 'R', '>', '>', '/', 'P', 'r', 'o', 'c', 'S', 'e', 't', '[', '/', 'P', 'D', 'F', '/', 'T', 'e', 'x', 't', ']', '>', '>', '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', 'H', '\x89', '\xa4', 'W', '\xd9', 'r', 'T', '\xc9', '\x11', '\xfd', '\x82', '\xfb', '\x0f', '\xf5', '\xd8', '\xa', '\xda', '\x97', 'G', '! ', '\x04', '\x06', '\x03']

На PDF, который случайно оказался у меня на рабочем столе (это IC Datasheet LTC1450)

Используя "rb" (Read Binary):

f = open("14500lf.pdf", "rb")
данные = list(f.read())
распечатать данные
['%', 'P', 'D', 'F', '-', '1', '. ', '5', '\r', '%', '\2', '\3', '\xcf', '\xd3', '\r', '\n', '1', '\, '0', '\, 'o', 'b', 'j', '<', '<', '/', 'C', 'o', 'n', 't', 'e', 'n', 't', 's', '\, '3', '\, ' ', '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', '>', '>', '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', '\n', '2', '9', '0', '2', '6', '9', '\n', '%', '%', 'E', 'O', 'F', '\n', '\n']

0
ответ дан 6 December 2019 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: