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''
?
假设我想将字节保存到一个列表中,然后将该列表再次保存为相同的图像。我该如何进行?
谢谢!
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''
?
假设我想将字节保存到一个列表中,然后将该列表再次保存为相同的图像。我该如何进行?
谢谢!
如果你真的需要“摆脱 b”,你可以使用 bytes.decode 函数:http: //docs.python.org/3.3/library/stdtypes.html#bytes.decode
但是从您的代码看来,您实际上并不需要这样做,您确实需要使用字节。
b"..." 只是字节字符串的 python 表示法,它实际上并不存在,它只是被打印出来。它会给你带来一些真正的问题吗?
,b''
只是当您写入数据时的字符串表示形式print
。
在这里使用decode
对您没有帮助,因为您只需要字节,而不是它们代表的字符。切片字符串表示的帮助会更少,因为这样你仍然会留下一个由几个无用字符('\'、'x' 等)组成的字符串,而不是原始字节。
不需要修改数据的字符串表示,因为数据还在。只需使用它而不是字符串(即不要使用print
)。如果要复制数据,只需执行以下操作:
data = file1.read(...)
...
file2.write(data)
如果要直接从程序中输出二进制数据,请使用sys.stdout.buffer
:
import sys
sys.stdout.buffer.write(data)
要对二进制数据进行操作,您可以使用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
这是摆脱的一种方法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)
这是一种解决方案
print(str(byte[2:-1]))