解析歌词,将歌词按照时间循序打印出来
musicLrc = “”“[00:03.50]传奇
[00:19.10]作词:刘兵 作曲:李健
[00:20.60]演唱:王菲
[00:26.60]
[04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼
[04:49.00]
[02:47.44][00:43.69]再也没能忘掉你容颜
[02:54.83][00:51.24]梦想着偶然能有一天再相见
[03:02.32][00:58.75]从此我开始孤单思念
[03:08.15][01:04.30]
[03:09.35][01:05.50]想你时你在天边
[03:16.90][01:13.13]想你时你在眼前
[03:24.42][01:20.92]想你时你在脑海
[03:31.85][01:28.44]想你时你在心田
[03:38.67][01:35.05]
[04:09.96][03:39.87][01:36.25]宁愿相信我们前世有约
[04:16.37][03:46.38][01:42.47]今生的爱情故事 不会再改变
[04:24.82][03:54.83][01:51.18]宁愿用这一生等你发现
[04:31.38][04:01.40][01:57.43]我一直在你身旁 从未走远
[04:39.55][04:09.00][02:07.85]
先将歌词保存为lrc.txt文件,与代码所在文件夹同级
import os
import time
dictLrc = {} #创建字典类型,全局变量
#打印歌词,按照时间顺序,
def lrcTime(lrc):
dictLrc = lrc #将形参赋值给实参
listLrc = sorted(dictLrc) #将字典的key值(时间)按大小排序
timeLen = len(listLrc)#读取出列表数量,即打印时循环多少次
timeFree = 0 #定义暂停时间
count = 0
for i in listLrc: #循环列表中的值,也就是字典中的key,
timeFree = i -count #得出暂停时间
time.sleep(timeFree) #暂停
print(dictLrc[i]) #打印出歌词
count = i #将上一个时间赋值给count,下一次循环继续使用
#将时间转换为秒
def revertTime(time):#传入的为字符串格式的
time1 = time
timeList = time1.split(":")#以:将时间拆分为分 和 秒
return round(float(timeList[0]) * 60 + float(timeList[1]),2) #返回时间为秒,保留两位小数
#从文件家中读取歌词
def getLrc():
rf = open("lrc.txt","r",errors = "ignore")
getlrc = rf.read()
rf.close()
return getlrc #返回为字符串
#拆分,应该转换成字典类型,以时间为key,歌词为value
def splitStr(getstr):#接收的为字符串
global dictLrc #创建字典类型
getStr = getstr
count = 0 #获取该单词需要输出几次
for i in getStr: #以][ ] [ 进行拆分
if i =="[":
count +=1
#注意替换顺序不能变,先替换"][",在替换单个的,否则可能出现两个**
getStr = getStr.replace("][","*")
getStr = getStr.replace("[","*")
getStr = getStr.replace("]","*")
lineLrc = getStr.split("*")
for i in range(1,count+1): #循环多次,得到多个key值
#将时间转换成秒的格式
LrcTimes = revertTime(lineLrc[i]) #调用转换时间的函数,此时key为秒
dictLrc[LrcTimes] = lineLrc[-1] #将列表最后一个歌词复制给字典key
#打印歌词函数
def printLrc(lrc):
lrc1 = lrc
for i in lrc1: # i 为字符串歌词
splitStr(i) #调用拆分函数
lrc = getLrc()#字符串类型
listLrc = lrc.split("\n")#以换行符将字符串拆分成列表
printLrc(listLrc)
lrcTime(dictLrc)