Python избавляется от байтов b ''
import save
string = ""
with open("image.jpg", "rb") as f:
byte = f.read(1)
while byte != b"":
byte = f.read(1)
print ((byte))
Я получаю байты:
b'\x00'
Как мне избавиться от этого b''
?
Скажем, я хочу сохранить байты в списке, а затем снова сохранить этот список как одно и то же изображение. Как я могу продолжить?
Спасибо!
Ответы
Ответ 1
Вы можете использовать функцию bytes.decode, если вам действительно нужно "избавиться от b": http://docs.python.org/3.3/library/stdtypes.html#bytes.decode
Но, похоже, из вашего кода вам действительно не нужно это делать, вам действительно нужно работать с байтами.
Ответ 2
b "..." - это всего лишь обозначение байтовых строк на питоне, оно на самом деле не существует, оно только печатается. Это вызывает некоторые реальные проблемы?
Ответ 3
b''
- это только строковое представление данных, которое записывается, когда вы print
его.
Использование decode
не поможет вам здесь, потому что вам нужны только байты, а не символы, которые они представляют. Сокращение строкового представления поможет еще меньше, потому что тогда вы по-прежнему оставляете строку из нескольких бесполезных символов ( "\", "x" и т.д.), А не исходные байты.
Нет необходимости изменять строковое представление данных, поскольку данные все еще существуют. Просто используйте его вместо строки (т.е. Не используйте print
). Если вы хотите скопировать данные, вы можете просто:
data = file1.read(...)
...
file2.write(data)
Если вы хотите вывести двоичные данные непосредственно из вашей программы, используйте sys.stdout.buffer
:
import sys
sys.stdout.buffer.write(data)
Ответ 4
Для работы с двоичными данными вы можете использовать массив-модуль.
Ниже вы найдете итератор, который работает на 4096 кусках данных вместо того, чтобы читать все в памяти за унцию.
import array
def bytesfromfile(f):
while True:
raw = array.array('B')
raw.fromstring(f.read(4096))
if not raw:
break
yield raw
with open("image.jpg", 'rb') as fd
for byte in bytesfromfile(fd):
for b in byte:
# do something with b
Ответ 5
Это один из способов избавиться от b''
:
import sys
print(b)
Если вы хотите сохранить байты позже, более эффективно читать весь файл за один раз, а не создавать список, например:
with open('sample.jpg', mode='rb') as fh:
content = fh.read()
with open('out.jpg', mode='wb') as out:
out.write(content)
Ответ 6
для лучшего и простого объяснения см. https://youtu.be/l-cGpIB76Lw
Ответ 7
Вот одно решение
print(str(byte[2:-1]))