python音乐属性信息处理

歌曲属性信息的获取和修改

最近想下载一些歌,在车上听,但发现不同软件的信息差异颇大,想要统一处理。但当文件数量大时,用系统自带筛选器等处理方式太慢,因而用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的项目已经鸽了,后续再看吧,考完那门期末再说。

    原文作者:UtadaHaru
    原文地址: https://blog.csdn.net/UtadaHaru/article/details/105929360
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞