簡體   English   中英

Python-兩個字符串看似相等但不相等

[英]Python - two strings appear to be equal but are not

我試圖弄清楚為什么在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']訪問它時,出現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的復制值(左)與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'

您應該看一下誘變劑api:

https://mutagen.readthedocs.io/en/latest/api/mp4.html

類別mutagen.mp4.MP4Tags
基礎:mutagen._util.DictProxy,mutagen.Tags

包含Apple iTunes元數據列表鍵/值的字典。

鍵是四個字節的標識符,自由格式('-')鍵除外。 值通常是unicode字符串,但是某些原子具有特殊的結構:

文本值(支持每個鍵多個值):

'\\ xa9nam'–曲目標題
'\\ xa9alb'–專輯
'\\ xa9ART'–藝術家等

print ( '\xa9')   #  

©

檢查key變量的類型。 鍵可能不是strings

事實證明,所討論密鑰中的兩個字符具有“異常” ASCII值。 當我有字符串'c'時,python假定我是指ASCII值為99的字符,而誘變劑創建的數據結構中的'c'字符使用ASCII值169。

我只需要使用ord確定字符串中各個字符的ASCII值,然后使用它們使用chr為鍵'cnam'構建正確的字符串。

>>> the_key == 'cnam'
False
>>> ord(the_key[0])
169
>>> ord(the_key[3])
109
>>> new_key = chr(169)+'na'+chr(109)
>>> new_key
'cnam'
>>> new_key == the_key
True

我不必檢查字符“ n”和“ a”的ASCII值,因為在問題中顯示“ n”和“ a”的“默認” ASCII值已與所討論的字符串的ASCII值匹配。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM