果粉有福了!5分钟学会用Python统计自己最爱听的音乐(3)
2023-04-29 来源:飞速影视
def findDuplicates(fileName): print("Finding duplicate tracks in %s..." % fileName) # read in a playlist① plist = plistlib.readPlist(fileName) # get the tracks from the Tracks dictionary② tracks = plist["Tracks"] # create a track name dictionary③ trackNames = {} # iterate through the tracks④ for trackId, track in tracks.items(): try:⑤ name = track["Name"] duration = track["Total Time"] # look for existing entries⑥ if name in trackNames: # if a name and duration match, increment the count # round the track length to the nearest second⑦ if duration//1000 == trackNames[name][0]//1000: count = trackNames[name][1]⑧ trackNames[name] = (duration, count 1) else: # add dictionary entry as tuple (duration, count)⑨ trackNames[name] = (duration, 1) except: # ignore pass
在①行,readPlist()方法接受一个p-list文件作为输入,并返回顶层字典。在②行,访问Tracks字典,在③行,创建一个空的字典,用来保存重复的乐曲。在④行,开始用items()方法迭代Tracks字典,这是Python在迭代字典时取得键和值的常用方法。
在⑤行,取得字典中每个音轨的名称和时长。用in关键字,检查当前乐曲的名称是否已在被构建的字典中⑥。如果是这样的,程序检查现有的音轨和新发现的音轨长度是否相同⑦,用//操作符,将每个音轨长度除以1000,由毫秒转换为秒,并四舍五入到最接近的秒,以进行检查(当然,这意味着,只有毫秒差异的两个音轨被认为是相同的)。如果确定这两个音轨长度相等,就取得与name关联的值,这是(duration,count)元组,并在⑧行增加计数。如果这是程序第一次遇到的音轨名称,就创建一个新条目,count为1⑨。
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)
www.fs94.org-飞速影视 粤ICP备74369512号