for filename in os.listdir('./Files'):
name, typeId = base64.b64decode(filename.replace('.png', '')).split('_!_')
错误:
name, typeId = base64.b64decode(filename.replace('.png', '')).split('_!_')
TypeError: a bytes-like object is required, not 'str'
答案 0 :(得分:0)
TypeError:需要类似字节的对象,而不是' str'
您可能会从两个地方收到此错误:
b64decode(filename.replace('.png', ''))
正如您所提到的,b64decode
需要一个类似字节的对象
但filename
是str,filename.replace
也会返回str。
试试这个:
for fname in os.listdir('./Files'):
fname_bytes = os.fsencode(fname.replace('.png', ''))
dec = base64.b64decode(fname_bytes)
parts = dec.split(b"_!_")
要解决1.,您可以使用os.listdir
文档中提到的fsencode
:
注意:要将
str
个文件名编码为字节,请使用fsencode()
。
要解决2.,您可以为" b
"添加前缀到字符串,使其成为byte literal:
字节文字始终以
'b'
或'B'
为前缀;它们生成bytes
类型的实例而不是str类型。