Python 修复binascii奇数长度字符串问题时出错

Python 修复binascii奇数长度字符串问题时出错,python,Python,我这里有一个小脚本,需要一些帮助: for song in songs: slash = song.rindex('\\') songbyte = slash + 2 if len(str(songbyte)) < 2: #if songbyte < 10: songbyte = "0" + str(songbyte) f.write(binascii.a2b_hex(songbyte)) else:

我这里有一个小脚本,需要一些帮助:

for song in songs:
    slash = song.rindex('\\')
    songbyte = slash + 2
    if len(str(songbyte)) < 2:
    #if songbyte < 10:
        songbyte = "0" + str(songbyte)
        f.write(binascii.a2b_hex(songbyte))
    else:
        f.write(binascii.a2b_hex("{0:x}".format(songbyte)))
f.close()
return
抛出“TypeError:奇数长度字符串”。现在,这已经足够描述了。通过调查,我确定songbyte出错时的值为8。然而,并没有意义的是,这个错误发生在列表中的37首歌曲中,而其他歌曲的大部分歌曲字节也是8——并且被我的len(str(songbyte))<2检查捕获,该检查添加了一个0——但奇怪的是,这个并没有

虽然我希望,但我不确定这些信息是否足以帮助我解决问题,除了提供整个脚本的完整细节,尽管我认为我做不到。有没有其他方法可以将songbyte(十六进制)写入文件

您应该使用,这正是出于此目的:

import struct
for song in songs:
    slash = song.rindex('\\')
    songbyte = slash + 2
    f.write(struct.pack('!B', songbyte))
格式字符串
“{0:x}”
不会在数字前插入零,您需要
“{0:02x}”


然而,使用binascii会导致不必要的复杂和脆弱代码。例如,如果值超过255,它将自动生成2个以上的字符

哇,这真是太好了,我一定会读到struct的!非常感谢。
import struct
for song in songs:
    slash = song.rindex('\\')
    songbyte = slash + 2
    f.write(struct.pack('!B', songbyte))
>>> "{0:x}".format(12)
'c'
>>> "{0:02x}".format(12)
'0c'