преобразовать двоичный файл в список (python) - PullRequest
3 голосов
/ 23 марта 2010

Я хотел бы иметь возможность открыть двоичный файл и создать список (вид массива) со всеми символами, например: "\ x21 \ x23 \ x22 \ x21 \ x22 \ x31" в [" \ x21" , "\ x23", "\ x22", "\ x21", "\ x22", "\ x31"] Каково было бы лучшее решение, чтобы преобразовать это?

Спасибо!

Ответы [ 4 ]

4 голосов
/ 23 марта 2010

Вы должны понимать, что "\ x21" и "!"это два способа представления одной и той же вещи

, поэтому "\x21\x23\x22\x21\x22\x31" совпадает с '!#"!"1'

>>> "\x21\x23\x22\x21\x22\x31"  == '!#"!"1'
True

>>> infile = open('infile.txt', 'rb')
>>> list(infile.read())
['!', '#', '"', '!', '"', '1']
>>> ['!', '#', '"', '!', '"', '1'] == ["\x21","\x23","\x22","\x21","\x22","\x31"]
True

Итак, вы видите, что это одно и то же, но python всегда пытается выбратьсамый удобный способ отображения символов

2 голосов
/ 23 марта 2010

Вы можете считывать двоичные данные в строку, как если бы вы работали с текстовыми данными, просто обязательно откройте файл в двоичном режиме (флаг b при вызове open()):

with open('file.bin', 'rb') as f:
   data = f.read()

data теперь содержит символы из файла в виде строки, например "\x21\x23\x22\x21\x22\x31".

1 голос
/ 23 марта 2010

Чтобы создать «своего рода массив» символов, чрезвычайно эффективный способ (больше, чем использование списка!) Заключается в использовании стандартной библиотеки Python array module:

res = array.array('c')
with open('binaryfile', 'rb') as f:
    while True:
        try: res.fromfile(f, 1024 * 1024)
        except EOFError: break

Он читает не более мегабайта за раз (это 1024 * 1024), но продолжает работать до тех пор, пока файл не будет готов - вы можете, конечно, настроить это поведение по своему усмотрению.

1 голос
/ 23 марта 2010

Предположим, что в myfile.txt есть 'abcdef \ n' ...

>>> fh = open('myfile.txt', 'rb')
>>> list(fh.read())
['a', 'b', 'c', 'd', 'e', 'f', '\n']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...