果粉有福了!5分钟学会用Python统计自己最爱听的音乐(4)

2023-04-29 来源:飞速影视
将代码的主for循环放在try语句块中,这是因为一些乐曲音轨可能没有定义乐曲名称。在这种情况下,跳过该音轨,在except部分只包含pass(什么也不做)。
提取重复
利用以下代码,提取重复的音轨:
# store duplicates as (name, count) tuples① dups = [] for k, v in trackNames.items():② if v[1] > 1: dups.append((v[1], k)) # save duplicates to a file③ if len(dups) > 0: print("Found %d duplicates. Track names saved to dup.txt" % len(dups)) else: print("No duplicate tracks found!")④ f = open("dups.txt", "w") for val in dups:⑤ f.write("[%d] %s " % (val[0], val[1])) f.close()
在①行,创建一个空列表,保存重复乐曲。接下来,迭代遍历trackNames字典,如果count(用v[1]访问,因为它是元组的第二个元素)大于1②,则将元组(name,count)添加到列表中。在③行,程序打印它找到的信息,然后用open()方法将信息存入文件④。在⑤行,迭代遍历dups列表,写下重复的条目。
1.3.3 查找多个播放列表中共同的音轨
现在,让我们来看看如何找到多个播放列表中共同的乐曲音轨:
def findCommonTracks(fileNames): # a list of sets of track names① trackNameSets = [] for fileName in fileNames: # create a new set② trackNames = set() # read in playlist③ plist = plistlib.readPlist(fileName) # get the tracks tracks = plist["Tracks"] # iterate through the tracks for trackId, track in tracks.items(): try: # add the track name to a set④ trackNames.add(track["Name"]) except: # ignore pass # add to list⑤ trackNameSets.append(trackNames) # get the set of common tracks⑥ commonTracks = set.intersection(*trackNameSets) # write to file if len(commonTracks) > 0:⑦ f = open("common.txt", "w") for val in commonTracks: s = "%s " % val⑧ f.write(s.encode("UTF-8")) f.close() print("%d common tracks found. " "Track names written to common.txt." % len(commonTracks)) else: print("No common tracks!")首先,将播放列表的文件名列表传入findCommonTracks(),它创建一个空列表①,保存从每个播放列表创建的一组对象。
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号