Python 可以在字节串上执行类似字符串的格式化操作了吗?
(问题来自 Cookbook.Page 82) 例如:
try:
test = b’%10s %10d %10.2f’ % (b’ACME’,100,490.1)
except TypeError:
print(‘不能子啊字节串上执行类似字符串的格式化操作’)
else:
print(test)
执行结果:b’ ACME 100 490.10’
但是 Cookbook 的 traceback 是‘ TypeError ’,这是为什么? Python 3.x 从哪个版本做修改了吗?
(一点值得注意,Byte String 还是不能执行.format()操作)
Python 可以在字节串上执行类似字符串的格式化操作了吗?
2 回复
是的,从Python 3.5开始,bytes和bytearray对象就支持使用%运算符进行类似字符串的格式化操作了。
这个功能用起来和字符串格式化基本一样,但有几个关键区别你得注意:
- 格式化字符串必须是字节串:
b"..."或bytearray(b"...") - 被格式化的值也必须是字节串或可转换为字节串的类型(比如整数)
- 不支持
s格式符,因为s是给字符串用的。字节串格式化主要用%b(字节串)和%c(单字节)
看几个例子就明白了:
# 基本用法
name = b"World"
result = b"Hello, %b!" % name
print(result) # 输出: b'Hello, World!'
# 多个值
host = b"localhost"
port = 8080
result = b"%b:%d" % (host, port)
print(result) # 输出: b'localhost:8080'
# 字典格式化
data = {b"key": b"value", b"num": 42}
result = b"%(key)s = %(num)d" % data # 注意这里用s,因为键是字节串
print(result) # 输出: b'value = 42'
# bytearray也可以
buf = bytearray(b"Result: %d")
result = buf % 100
print(result) # 输出: bytearray(b'Result: 100')
重要限制:
- 不能混用字符串和字节串:
b"Hello %s" % "World"会报错 - 不支持高级的格式化选项,比如宽度、精度等
- 在Python 3.5+才完全支持,老版本可能行为不一致
如果你需要更复杂的字节串格式化,建议用str.format()生成字符串再编码,或者用f-string。
总结:能用,但有限制。

