我试图弄清楚为什么在 python 中看起来相等的两个字符串不相等。似乎有一个类似的问题发布为什么我的两个 python 字符串在我的程序中不相等但在解释器中相等?但这并不能解决我的问题。在上面的这篇文章中,问题显然是一个字符串末尾的新行,而不是另一个字符串。
我正在编写一个脚本来组织我的音乐收藏中的音乐文件。我正在使用诱变剂读取文件元数据。我遇到了 .m4p 文件的问题。我用
import mutagen
metadata = mutagen.File(“audio.m4p”)
获取文件元数据的字典。我查看字典中的键
for key in metadata.keys(): print(key)
返回
----:com.apple.iTunes:tool
----:com.apple.iTunes:iTunNORM
cnam
cART
aART
cwrt
calb
cgen
trkn
disk
cday
cpil
pgap
apID
cprt
cnID
rtng
atID
cmID
plID
geID
sfID
akID
stik
purd
----:com.apple.iTunes:iTunMOVI
covr
'cnam' 似乎是包含文件标题的 dict 项的索引。但是,当我尝试使用它访问它时,mutagen[‘cnam’]
我得到KeyError: 'cnam'
.
困惑,然后我将此键分配给一个变量
the_key = list(metadata.keys())[2]
帮助收集信息。我做了以下事情:
>>> the_key=='cnam'
False
>>> the_key[0]=='c'
False
>>> the_key[1]=='n'
True
>>> the_key[2]=='a'
True
>>> the_key[2]=='m'
False
the_key
下面测试了从命令行复制的值(左)和手动键入的似乎是键的版本(右)的相等性
>>> 'cnam'=='cnam'
True
发现他们是平等的。
似乎存在某种我不明白的文本格式问题。我假设有些字符看起来相同但实际上并非如此,但我似乎无法通过复制和粘贴来证明这一点。
我的问题是:这里有什么问题,我该如何解决?我可以想象一个涉及对 dict 或其他东西的操作的工作,但我宁愿找出手头的问题。
编辑:我假设mutagen.File
返回一个字典是错误的。它返回一个<class 'mutagen.mp4.MP4'>
对象。
编辑:
len(the_key)
4
编辑:
type(the_key)
<class 'str'>
编辑:
>>> print("<{}>".format(the_key))
<cnam>
>>> print(repr(the_key))
'cnam'