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''
?
假设我想将字节保存到列表中,然后再将该列表另存为同一图像。我该怎么办?
谢谢!
答案 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]))