Python摆脱字节b''

时间:2013-06-09 19:01:57

标签: python python-3.x

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

假设我想将字节保存到列表中,然后再将该列表另存为同一图像。我该怎么办?

谢谢!

6 个答案:

答案 0 :(得分:12)

如果你真的需要“摆脱b”,你可以使用bytes.decode函数:http://docs.python.org/3.3/library/stdtypes.html#bytes.decode

但是从你的代码中看来,你真的不需要这样做,你真的需要使用字节。

答案 1 :(得分:4)

b“...”只是一个字节字符串的python表示法,它不是真的存在,只能打印出来。它会给你带来一些真正的问题吗?

答案 2 :(得分:3)

b''只是print时写入的数据的字符串表示形式。

使用decode对您没有帮助,因为您只需要字节,而不是它们所代表的字符。切片字符串表示会有所帮助,因为这样你仍然会留下一些包含几个无用字符('\','x'等)的字符串,而不是原始字节。

无需修改数据的字符串表示形式,因为数据仍然存在。只需使用它而不是字符串(即不要使用print)。如果要复制数据,只需执行以下操作:

data = file1.read(...)
...
file2.write(data)

如果要直接从程序输出二进制数据,请使用sys.stdout.buffer

import sys

sys.stdout.buffer.write(data)

答案 3 :(得分:2)

要对二进制数据进行操作,您可以使用array-module。 下面你会发现一个迭代器,它可以处理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 

答案 4 :(得分:2)

这是摆脱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)

答案 5 :(得分:-5)

这是一个解决方案

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