要求:
- 写一个类,其功能是:1.解析指定的歌词文件的内容 2.按时间显示歌词 提示:歌词文件的内容一般是按下面题末尾的格式进行存储的。
- 歌词前面对应的是时间,在对应的时间点可以显示对应的歌词
class AnalysisLyric:
"""分析歌词"""
def __init__(self, lyric: str):
self.lyric = lyric
def lyric_slice(self):
"""思路:
1.把歌词按行分开,然后把歌词和时间分开,
2.去掉时间的:和[]符号之后返回一个浮点数时间,
3.在和相对应的歌词组成一个列表
"""
self.list_new_lyric = []
# 把歌词按行分开
self.list_lyric = self.lyric.split('\n')
for i in range(len(self.list_lyric)):
# 遍历出每行歌词,把每行的歌词时间分开(把歌词倒序便于切分歌词和时间)
item = self.list_lyric[i][::-1].split(']', 1)
# 把歌词顺序倒回原样提出来赋值给item[0]
item[0] = item[0][::-1]
# 把时间左边的[去掉,多行的歌词再以][切分成小部分,切分后的时间返回一个列表
list_time = (item[1][::-1].lstrip('[')).split('][')
for time_piece in list_time[:]:
# 遍历时间列表,取出时间列表中的时间元素,将其转化为浮点数并匹配相应歌词返回一个列表
time_slice = time_piece.split(':')
time_lyric = float(time_slice[0]) * 60 + float(time_slice[1])
new_list = [time_lyric, item[0]]
# 将每一个时间歌词列表添加到大列表中
self.list_new_lyric.append(new_list)
# 把大列表中的时间歌词列表按照时间由小到大排序
self.list_new_lyric.sort(key=lambda x: x[0])
return self.list_new_lyric
def time_analysis(self, time: int):
'''分析输入的时间,时间可以以两种形式输入:20.2、10 / 02:22.22、00:33.33'''
# 输入的时间可能是xx:xx.xx格式,将输入的时间以:符号分开
time_list = str(time).split(':')
# 若时间为xx:xx.xx格式,列表中就有两个元素,将列表中的元素转换为浮点数时间
if len(time_list) > 1:
new_time = float(time_list[0]) * 60 + float(time_list[1])
return new_time
# 列表中有一个元素表明输入的为xx.xx格式,将其转换为浮点数
else:
new_time = float(time_list[0])
return new_time
def judge_lyric(self, time):
# 先进行歌词切片得到新的歌词列表
lyric_list = self.lyric_slice()
# 如果时间在出现歌词之前,例如00.00.01,此时没有歌词,返回一个字符串
time = self.time_analysis(time)
if time < lyric_list[0][0]:
return '此时间段没有歌词'
# 歌词列表进行遍历,如果输入时间处于歌词列表两个时间之间,返回前一个时间对应的歌词
for x in range(len(lyric_list)):
if lyric_list[x][0] <= time < lyric_list[x+1][0]:
print(lyric_list[x][1])
return
lyric = """[00:00.20]lyric_l
[00:00.80]没有什么能够阻挡
[00:06.53]你对自由地向往
[00:11.59]天马行空的生涯
[00:16.53]你的心了无牵挂
[02:11.27][01:50.22][00:21.95]穿过幽暗地岁月
[02:16.51][01:55.46][00:26.83]也曾感到彷徨
[02:21.81][02:00.60][00:32.30]当你低头地瞬间
[02:26.79][02:05.72][00:37.16]才发觉脚下的路
[02:32.17][00:42.69]心中那自由地世界
[02:37.20][00:47.58]如此的清澈高远
[02:42.32][00:52.72]盛开着永不凋零
[02:47.83][00:57.47]lyric_l"""
# 直接将歌词给字符串
irc = AnalysisLyric(lyric)
irc.judge_lyric(120)
# 把歌词放进txt文件,读出歌词
with open('./lyric_l', 'r', encoding='utf-8') as f:
f2 = f.read()
irc2 = AnalysisLyric(f2)
irc2.judge_lyric(58)
lyric_l.txt文档内容
[00:00.20]lyric_l
[00:00.80]没有什么能够阻挡
[00:06.53]你对自由地向往
[00:11.59]天马行空的生涯
[00:16.53]你的心了无牵挂
[02:11.27][01:50.22][00:21.95]穿过幽暗地岁月
[02:16.51][01:55.46][00:26.83]也曾感到彷徨
[02:21.81][02:00.60][00:32.30]当你低头地瞬间
[02:26.79][02:05.72][00:37.16]才发觉脚下的路
[02:32.17][00:42.69]心中那自由地世界
[02:37.20][00:47.58]如此的清澈高远
[02:42.32][00:52.72]盛开着永不凋零
[02:47.83][00:57.47]lyric_l