Подтвердить что ты не робот

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

Скажем, я хочу сохранить байты в списке, а затем снова сохранить этот список как одно и то же изображение. Как я могу продолжить?

Спасибо!

4b9b3361

Ответ 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)

Ответ 7

Вот одно решение

print(str(byte[2:-1]))