Как сохранить фактические двоичные числа в файл с помощью python

Это для сжатия файлов. Я хотел бы сохранить двоичную строку, например «00011110», как реальную последовательность 1 и 0, чтобы при использовании команды Powershell «format-hex» для просмотра сохраненного файла я увидел

1E

который является шестнадцатеричным представлением двоичного числа 00011110. Вместо

00 00 00 01 01 01 01 00

это то, что bytearray() дал бы мне. Кажется, должен быть простой способ сделать это.

int("00011110", 2) будет анализировать строку как двоичное число.
Barmar 23.12.2020 21:33

не совсем; проблема в том, как сохранить его в файл. т.е. «двоичная строка», сохраненная из python, фактически не сохраняется в буквальном двоичном формате, она по-прежнему использует ascii

aloea 23.12.2020 21:40
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
197
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема состоит из трех частей: сначала вы должны преобразовать строку в целое число, а затем это целое число должно быть преобразовано в строку байтов, которую можно записать в файл.

file    = open(path_to_file, 'wb') # open file in binary write mode
integer = int("00011110", 2)
byte    = integer.to_bytes(1,'big') # endianness is irrelevant with a single byte
file.write(byte) # writes the single byte to the file

Это должно позволить записывать октеты в двоичном режиме и записывать их напрямую; теперь файл должен содержать только фактический октет 00011110, или целое число 30, или разделитель записи управляющего символа.

Достаточно ли будет использовать b'00011110'?

mapf 23.12.2020 21:58

строка 3 вызывает AttributeError: объект 'str' не имеет атрибута 'to_bytes'

aloea 23.12.2020 22:03

@mapf Нет, это совершенно другая строка байтов, которая на самом деле имеет длину 8 байтов. Эта байтовая строка содержит кодировку ASCII из 8 различных символов, что не является тем, что o.p. хочет.

Zorf 23.12.2020 22:03

@aloea, это моя ошибка — я только что исправил ее. я забыл разобрать строку

Zorf 23.12.2020 22:04

@Zorf Понятно, спасибо! Я никогда не работал с ними, я думал, что они используются для этого.

mapf 23.12.2020 22:07

это здорово, как вы думаете, это будет работать с более длинными битовыми строками, или мне придется перебирать их, сохраняя 8 за раз

aloea 23.12.2020 22:09

@aloea, можно редактировать целое число в части to_bytes по своему усмотрению для работы с целыми числами, которые потребляют более одного байта, чтобы оно возвращало строки байтов из более чем одного байта, но имейте в виду, что в этот момент порядок байтов становится фактором, хотя вы, вероятно, хотите с прямым порядком байтов.

Zorf 23.12.2020 23:22

Другие вопросы по теме