使用python基本语法实现歌词解析输出

解析歌词,将歌词按照时间循序打印出来
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)

你可能感兴趣的:(python,python学习笔记)