私は次のことをしようとしています:私の音楽フォルダ内のすべてのファイルを解析し、それらが私のお気に入りの中にある場合は、それらを別のフォルダにコピーします。
これを実現するために、私はお気に入りのトラックでxmlを解析し、その情報を使用して、このように構造化されたカスタム辞書を作成しています。
lovedSongs[artist][title] = 1
フォルダからファイルを解析するとき、id3タグから曲のタイトルとアーティストを読み取り、理論的にlovedSongs[tagArtist][tagTitle]
は1であるかどうかを確認しようとします。
for filename in filelist:
if filename[-4:] == ".mp3":
try:
id3r = id3reader.Reader(filename)
except UnicodeDecodeError:
artist = "None"
title = "None"
except IOError:
artist = "None"
title = "None"
else:
artist = ensureutf8andstring(id3r.getValue('performer'))
title = ensureutf8andstring(id3r.getValue('title'))
if artist != "None" or title != "None":
if lovedSongs[artist][title] == 1:
print artist + ' - ' + title
.pyファイルを実行しようとすると、辞書のキーエラーが発生します。私はここで潜在的な答えを見つけました:KeyErrorを発生させる代わりに辞書から欠落しているキーのキーを返すPython辞書を作成するにはどうすればよいですか?以下のように適用しましたが、それでもキーエラーが発生しました
class SongDict(dict):
def __init__(self, default=None):
self.default = default
def __getitem__(self, key):
if not self.has_key(key):
self[key] = self.default()
return dict.__getitem__(self, key)
def __missing__(self, key):
return 0
最善の解決策は何でしょうか?単純なifの代わりにtry/exceptを使用しますか?
PS私はPythonの初心者であり、「経験」はほんの数時間であり、これが言語を学ぼうとする私の方法であることに言及する必要があると思います。