"""new python"""
import re
import time
class Lyrics:
"""歌词显示"""
@classmethod
def show(cls, file): # 静态方法,打印时间以及歌词
ly_list = cls.ly_tuple_list(file) # 获得歌词列表
print('开始播放......')
star_ly = 0 # 设置初始播放的开始时间
star_time = time.clock() # 歌词开始打印的开始时间
for lytime_ly in ly_list:
time.sleep(cls.get_time(lytime_ly[0]) - star_ly) # 歌词打印的时间点
print(lytime_ly[0], lytime_ly[1]) # 打印歌词
star_ly = cls.get_time(lytime_ly[0]) # 为下一行歌词打印的时间点设置相对时间
end_time = time.clock() # 歌词打印完毕结束时间
print('一首歌的时间:' + str(end_time - star_time) + ' s') # 计算整首歌的时间
@classmethod
def ly_tuple_list(cls, file): # 读取文件并转化数据的方法 txt数据-->[()]内元素为元组,外层列表容器
with open(file, 'r', encoding='utf-8') as ly:
context = ly.read() # 读取文件
new_str = re.sub('\n', ',', context) # 转化为每一行由 逗号 分割的组合字符串
list1 = new_str.split(',') # 按 逗号 分割成字符串列表
"""
以上两步可以用一步代替
list1 = context.split('\n')
"""
list_ly = [] # 初始化 元组歌词列表
for key in list1:
time_list = re.findall(r'\[(.+?)\]', key) # 获取字符串中的多个时间并以他们为元素构成列表
ly = re.sub('[0-9\!\%\[\]\,\。\:\.]', '', key) # 获取字符串中的歌词
for x in time_list: # 遍历每一个时间列表
list_ly.append((x, ly)) # 将时间和对应的歌词组合为2元组传入 元组歌词列表
for i in range(len(list_ly)): # 冒泡排序,按照元组中的时间先后进行排序
for j in range(i, len(list_ly)):
if cls.get_time(list_ly[i][0]) > cls.get_time(list_ly[j][0]):
list_ly[i], list_ly[j] = list_ly[j], list_ly[i]
return list_ly # 返回元组列表
@staticmethod
def get_time(key): # 将歌词式时间转化为可判断大小的以s为单位的时间
new_time = re.sub('[\:\.]', '', key) # 清除符号
result = new_time.lstrip('0') # 清除多余的 0
ms = int(result) % 100 # 秒的小数位
s = int(result) // 100 % 100 # 秒的整数位
m = int(result) // 10000 # 分的整数位
return ms * 0.01 + s + m * 60 # 返回可判断大小的时间
if __name__ == '__main__':
Lyrics.show('ly.txt')
# 结果
开始播放......
00:00.20 蓝莲花
00:00.80 没有什么能够阻挡
00:06.53 你对自由地向往
00:11.59 天马行空的生涯
00:16.53 你的心了无牵挂
00:21.95 穿过幽暗地岁月
00:26.83 也曾感到彷徨
00:32.30 当你低头地瞬间
00:37.16 才发觉脚下的路
00:42.69 心中那自由地世界
00:47.58 如此的清澈高远
00:52.72 盛开着永不凋零
00:57.47 蓝莲花
01:50.22 穿过幽暗地岁月
01:55.46 也曾感到彷徨
02:00.60 当你低头地瞬间
02:05.72 才发觉脚下的路
02:11.27 穿过幽暗地岁月
02:16.51 也曾感到彷徨
02:21.81 当你低头地瞬间
02:26.79 才发觉脚下的路
02:32.17 心中那自由地世界
02:37.20 如此的清澈高远
02:42.32 盛开着永不凋零
02:47.83 蓝莲花
一首歌的时间:167.85623402976904 s
思路型代码,对以下数据样式的文件(.txt)都有效(json的没写,要写就是改下读取文件的模式)
歌词文件: