歌曲属性信息的获取和修改
最近想下载一些歌,在车上听,但发现不同软件的信息差异颇大,想要统一处理。但当文件数量大时,用系统自带筛选器等处理方式太慢,因而用python做了一个小文件。
主要用的package是mutagen,用里面的flac和mp3模块。倘若是qqmusic的qmc等,需要自行转码,这里为保护版权,不提供相关方法。
import os
import mutagen
from mutagen.flac import FLAC
from mutagen.mp3 import EasyMP3
import numpy as np
import pandas as pd
path = 'd:/yourpath/'#自己的路径
file_list = os.listdir(path)
file_link = []
for i in file_list:
file_link.append( path + i)
name = [];title = [];album = [];artist = [];
info = (title, album, artist); infostr = ('title', 'album', 'artist')
调包,定义变量。中间那步改成绝对路径的可做可不做,反正不影响整体速度。这里只做歌曲名,歌手和专辑信息。
接下来是获取歌曲信息表,并输出成excel。
def get():
for i in file_link:
name.append(i)
if i[-4:]=='flac':
audio = FLAC(i)
elif i[-3:] == 'mp3':
audio = EasyMP3(i)
else:
audio = None
if audio != None:
for j in range(2):
try:
info[j].append(audio[infostr[j]][0])
except KeyError:
info[j].append('None')
try:
artist.append(';'.join(audio['artist']))
except KeyError:
artist.append('None')
else:
pass
df = pd.DataFrame({ 'link':name,'title':title, 'album':album, 'artist':artist})
df.to_excel('music_info.xlsx')
处理文件必须得try,和判断格式,这里简单地做了一下,except了遇到的error。
如果有多个歌手,应该用分号隔开,这是计算机能识别的方式。如果是用斜杠隔开,可以在excel里修改,并用下面的函数导回去。其他信息也是一样。
def revise():
info_df = pd.read_excel('music_info_revised.xlsx')
for i in range(info_df.shape[0]):
if info_df.iloc[i]['link'][-4:]=='flac':
audio = FLAC(info_df.iloc[i]['link'])
elif info_df.iloc[i]['link'][-3:] == 'mp3':
audio = EasyMP3(info_df.iloc[i]['link'])
else:
audio = None
if audio != None:
for j in range(2):
try:
audio[infostr[j]] = info_df.iloc[i][infostr[j]]
except KeyError:
audio[infostr[j]] = [None]
try:
audio['artist'] = info_df.iloc[i]['artist'].split(';')
except KeyError:
artist.append('None')
else:
pass
audio.save()
为免撞车,这里处理的excel文件名已经改过,使用时应当将修改后的excel另存一份。
简单项目,其实只是一个文件,就用过程写法了,也没什么technique(不需要)。
之前corona virus的项目已经鸽了,后续再看吧,考完那门期末再说。