- XML和属性列表(p-list)文件
- 使用numpy数组
- 用matplotlib绘制直方图和散点图
import argparse from matplotlib import pyplot #用来读取播放列表文件 import plistlib #用来存储数据 import numpy as np def findCommonTracks(filenames): trackNameSets = [] for f in filenames: tracknames = set() plist = plistlib.readPlist(f) tracks = plist['Tracks'] for id,track in tracks.items(): try: tracknames.add(track['Name']) except: pass trackNameSets.append(tracknames) #找到重复的放到文件里 commonTracks = set.intersection(*trackNameSets) if len(commonTracks)>0: f = open("common.txt",'wb') for val in commonTracks: val += '\n' f.write(val.encode('utf-8')) f.close() print("重复的音轨已写入到common.txt中") else: print("没有重复的音轨") #查找重复的曲目 def findDuplicates(filename): plist = plistlib.readPlist(filename) tracks = plist['Tracks'] tracknames ={} for id,track in tracks.items(): try: name = track['name'] duration = track['Total Time'] if name in tracknames: if duration//1000 == tracknames[name][0]//1000: count = tracknames[name][1] tracknames[name] = (duration,count+1) else: tracknames[name] = (duration, 1) except: pass #提取重复的音轨 dups = [] for k,v in tracknames.items(): if v[1] > 1: dups.append((v[1],k)) if len(dups): print("存在重复的音轨,已经记录到dups.txt中") else: print("没有重复的音轨") f = open("dups.txt","wb") for val in dups: f.write(val[0]) f.write(val[1]) f.close() #收集信息并绘制 def plotStats(filename): plist = plistlib.readPlist(filename) tracks = plist['Tracks'] #评级和持续时间 ratings = [] durations = [] for id,track in tracks.items(): try: ratings.append(track['Album Rating']) durations.append(track['Total Time']) except: pass if ratings == [] or durations == []: print("%s的评级和持续时间不合理"%filename) return #柱状图 x = np.array(durations,np.int32) x = x/60000 y = np.array(ratings,np.int32) pyplot.subplot(2,1,1) pyplot.plot(x,y,'o') pyplot.axis([0,1.05*np.max(x),-1,110]) pyplot.xlabel("Track Duration") pyplot.ylabel("Track rating") #散点图 pyplot.subplot(2,1,2) pyplot.hist(x,bins = 20) pyplot.xlabel("Track duration") pyplot.ylabel("count") pyplot.show() #命令行选项 def main(): descStr ="this programm analyzes playlist files(.xml) exported from iTunes." parser = argparse.ArgumentParser(description=descStr) group = parser.add_mutually_exclusive_group() group.add_argument('--common',nargs='*',dest='plFiles',required=False) group.add_argument('--stats', dest='plFile', required=False) group.add_argument('--dup', dest='plFileD', required=False) args = parser.parse_args() if args.plFiles: findCommonTracks(args.plFiles) elif args.plFile: plotStats(args.plFile) elif args.plFileD: findDuplicates(args.plFileD) else: print('error!') if __name__ == "__main__": main()
解析iTunes播放列表
猜你喜欢
转载自blog.csdn.net/qq_41359265/article/details/84777256
今日推荐
周排行