如何将此格式从str格式化为类似字节的对象?

时间:2018-04-28 03:15:21

标签: python-3.x base64 byte

<啊>啊,我在解码这些文件名时遇到了麻烦(它们被编码为base64)。我知道他们需要像字节一样的对象,但我不能为我的生活做到这一点。请多帮忙。

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'

1 个答案:

答案 0 :(得分:0)

  

TypeError:需要类似字节的对象,而不是&#39; str&#39;

您可能会从两个地方收到此错误:

  1. b64decode(filename.replace('.png', ''))
    正如您所提到的,b64decode需要一个类似字节的对象 但filename是str,filename.replace也会返回str。

  2. .split('_!_')
    由于b64decode将返回字节,因此您还必须将类似字节的对象传递给split

  3. 试试这个:

    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.,您可以为&#34; b&#34;添加前缀到字符串,使其成为byte literal

      

    字节文字始终以'b''B'为前缀;它们生成bytes类型的实例而不是str类型。