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]
"""
# 1.创建一个空的字典用来保存歌词数据
# 2.将字符串拆分成行
# 3.将一行数据中的 时间key  和   歌词value提去出来
# 4保存到字典中去
# 目的: 将歌词解析出来,用字典来保存, 时间作为key, 歌词作为value

# 保存歌词的字典
dictMusicText = {}
# 将字符串拆分成很多行
listLines = musicLrc.splitlines()
#遍历数据得到一行数据
for  line  in  listLines:
     # print(line)
    # [04:40.75][02:39.90][00:36.25]只是因为在人群中多看了你一眼
    # [04:40.75   ]    [02:39.90    ]     [00:36.25   ]   只是因为在人群中多看了你一眼
    #     04:40.75    02:39.90         00:36.25         只是因为在人群中多看了你一眼
     lineList = line.split( "]" )
     # 歌词数据
     value = lineList[- 1 ]
     for  in  range ( len (lineList) -  1 ):
         # 获得时间数据
        # print(lineList[i][1:])
#        将字符串形式的时间转换成 数字型  "01:28.44" --->  88.44秒
#         将分钟与秒拆开
         timeList = lineList[i][ 1 :].split( ":" )
#        数字类型的时间
         time =  float (timeList[ 0 ])* 60  float (timeList[ 1 ])
         # print(time)
         key = time
         # 将时间和歌词保存到字典中去
         dictMusicText[key] = value
# print(dictMusicText)

# 字典是无序的, key
# 将字典所有的key取出来,放在列表中然后排序
# 创建一个空列表
listKey = []
for  key  in   dictMusicText.keys():
    listKey.append(key)
# 排序, 默认是升序
listKey.sort()
# print(listKey)

#可以按照时间循序打印歌词
for  key   in   listKey:
     print ( "key=%f, value = %s" %(key,dictMusicText[key]))

# 输入任意一个时间,输出对应时间点的歌词
# 0 - 3.5 - 19.1  -  20.6.......   4.5, 20
# 让用户输入一个秒为单位的时间
setTime =  float ( input ( "请输入一个时间:" ))
for  in   range ( len (listKey)):
     if  setTime  < listKey[i]:
#        取当前时间点的上一个时间点
         cKey = listKey[i- 1 ]
         print ( "当前时间点的歌词是:%s" %(dictMusicText[cKey]))
         break


import  time
# 每隔1s打印出当前时间对应的歌词,   1s  2s
playTime =  0
while True :
     for  in  range ( len (listKey)):
         if  playTime  < listKey[i]:
         #        取当前时间点的上一个时间点
                 cKey = listKey[i- 1 ]
                 print ( "playTime:%s" %(dictMusicText[cKey]))
                 break
#   睡一会
     playTime +=  1
     time.sleep( 1 )
# 作业: 判断边界, 完善代码, 最好有自己的思路
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值