我平时大多时候都是用Walkman听歌,摆脱了电脑的束缚但也有个很大的缺点:
Walkman的播放列表,也就是我们常说的歌单只能一首一首地往里面添加歌曲,相对pc端的各大主流播放器确实麻烦了不少。
在一次向Walkman里传输歌曲的过程中,发现SD卡里有一些.M3U8
格式的文件,并且文件名与我播放器里的播放列表一致,使用文本编辑器打开:
除开不认识的
#EXTM3U
和#EXTINF:,
里面存放的就是播放列表里每首歌的路径。那么,如果我们按照此格式向文件里写入歌曲的路径,是不是就能通过写文件的方式将歌曲存入歌单呢,在验证后得出的答案是肯定的。
对于播放器里歌曲较多的人来说,手动添加至播放列表无疑是低效的,于是我选择了用python
来‘代替’我做这件事情,思路是:遍历播放器指定文件夹里的音乐文件然后按照上面的格式将其写入.M3U8
文件。
当然这其中有一个很重要的前提:播放器中的歌曲是按照类别分了文件夹的!
不然下面的代码没有意义。
完整代码
先放出完整代码,后面会进行一些说明。
import os
rootpath = r'G:\MUSIC'
tarPath = r'G:\MUSIC\华语'
name = "华语"
fmList = ['.flac', '.mp3', '.m4a', '.wav', '.dsf', '.ape', '.FLAC', '.WAV', '.DSF', '.APE']
mList = []
def walkDir(tarPath, rootpath=rootpath):
tpList = os.listdir(tarPath)
for each in tpList:
if os.path.isdir(tarPath+'\\'+each):
walkDir(tarPath+'\\'+each)
else:
mList.append((tarPath.lstrip(rootpath)+'/'+each).replace('\\', '/'))
def m3uGen(title):
with open('{}.M3U8'.format(title), 'w+', encoding='utf-8') as f:
f.write('#EXTM3U\n')
for each in mList:
if os.path.splitext(each)[1] in fmList:
f.write('#EXTINF:,\n'+each+'\n')
os.chdir(rootpath)
walkDir(tarPath)
m3uGen(name)
一些变量名和配置
-
rootpath
:播放器接入电脑后存放音乐的根目录,同时也是歌单文件(.M3U8
)所在目录。 -
tarPath
:某一类别的歌曲所在的文件夹,这些歌曲将会写入你准备新建的歌单。 -
name
:新建歌单的歌单名,不用添加后缀。 -
fmList
中预存了一些音乐文件的格式,如果还有其他格式,添加进去即可。
若你有其他的生成歌单的方式,欢迎在评论区一起讨论。