ここにいくつかの助けが必要な小さなスクリプトがあります。
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
まず、プレイリストを作成しようとしています。テスト目的で、49 曲を含むものを書いています。曲は、49 曲を含む反復処理中のリストです。
私は songbyte を書く必要があります -- それは 8 から 72 までの範囲の値です. 現時点では、各 songbyte に対して正しい値を持っていることを確認しています (これは既知の正しいプレイリストのコピーです. diff と 16 進エディタを使用)。
私の問題は、その行です
print(binascii.a2b_hex("{0:x}".format(songbyte)))
「TypeError: 奇数長の文字列」をスローします。さて、これで十分に説明できます。調査の結果、エラーになるときの songbyte の値は 8 であることがわかりました。ただし、このエラーがリストの 37 曲目で発生し、他の曲の songbytes の大部分がも8です-そして、0を追加する私のlen(str(songbyte)) < 2チェックで捕まります-しかし、奇妙なことに、これはそうではありません。
スクリプト全体の完全な詳細を提供することを除けば、これが問題の解決に役立つ十分な情報であるかどうかはわかりませんが、できるとは思いません。songbyte を 16 進数としてファイルに書き込む別の方法はありますか?