自己写的  有更好方案的大佬可以讨论一下

import bisect
class Lrc():
def __init__(self, sec, lrc):
self.sec = sec
self.lrc = lrc def __str__(self):
return "时间{} 歌词{}".format(self.sec, self.lrc) class Jiexi():
def __init__(self,file_path):
self.lrc_dict = {} #时间与歌词的键值对字典
self.lrc_second = [] #存放时间的列表
self.lrc_list = []#存放Lrc对象的列表
self.file_path = file_path
self.fenxi() def fenxi(self):
with open(self.file_path, 'r', encoding='utf-8') as file_object:
while True:
string = file_object.readline().rstrip()
#print(string)
if string == "":
break
if string[1].isdecimal(): #去除前三行非歌词部分
lrc_list = string.split(']') #分割开时间与歌词
lrc_info = lrc_list[-1] #获得歌词
time_info = lrc_list[:-1] #获得全部时间部分
for time_str in time_info: #遍历时间部分 获得全部时间
time_str = time_str[1:]
time_info_list = time_str.split(':')#得到分钟与秒数
time_min = float(time_info_list[0])
time_sec = float(time_info_list[1])
time = time_min * 60 + time_sec #将时间字符串格式化为小数
index = 1
lrc = "lrc" + str(index) #创建Lrc对象的对象名字
index += 1         #第一个循环Lrc对象名为lrc1第二次循环对象名为lrc2以此类推
lrc = Lrc(time,lrc_info) #创建Krc对象 传进去时间参数以及歌词参数
self.lrc_list.append(lrc)
self.lrc_second.append(time)
self.lrc_dict[time] = lrc_info
return self.lrc_list def get_lyric(self,lyric_time):
self.lrc_second.sort() #将存放时间的列表排序
lyric_te_lt = lyric_time.split(":") #分割你输入的时间
res_time = float(lyric_te_lt[0]) *60 + float(lyric_te_lt[1]) #格式化输入时间
res_position = bisect.bisect_left(self.lrc_second,res_time) #二分搜索模块得到结果时间的位置
return self.lrc_dict[self.lrc_second[res_position-1]] #位置减1即为坐标 通过字典获得歌词 返回 def main(): #测试
song = Jiexi("D:/pyworkpace/qfpython/11-day/songwrod.txt") #输入的路径以自己的为准
print(song.lrc_list[0])
print(song.get_lyric("02:10.00")) if __name__ == '__main__':
main()

最新文章

  1. 微博mid和id转换
  2. 判断 Gym 100502K Train Passengers
  3. CCF真题之模板生成系统
  4. 【HAOI2009】【P1307】毛毛虫
  5. 选择排序的openMP实现
  6. 谈谈Javascript线程
  7. telnet IP不通/sybase central工具无法连接到数据库
  8. java javaEE javaWEB J2EE程序猿猿程序是脑损伤,终身工作程序猿
  9. Docker系统八:Docker的存储驱动
  10. 云计算--网络原理与应用--20171122--STP与HSRP
  11. Junit4 IDEA测试学习一
  12. alpha冲刺6/10
  13. mybatis隐藏不用的sql
  14. VB播放声音
  15. Prometheus Node_exporter 之 Network Sockstat
  16. VS2015安装与单元测试
  17. OpenACC 绘制曼德勃罗集
  18. Oracle创建库
  19. Linux 网络 I/O 模型简介(图文)
  20. TCP协议详解(理论篇)

热门文章

  1. 使用MDScratchImageView实现刮奖效果
  2. Python实例---利用正则实现计算器[FTL版]
  3. Centos7下面安装eclipse
  4. Exchange Server 产品路线图 及 补丁下载
  5. The Shapes of CSS(css的形状)
  6. java接口实例
  7. JavaScript事件的委派与事件的绑定
  8. POJ - 3476 A Game with Colored Balls---优先队列+链表(用数组模拟)
  9. Guava包学习---Lists
  10. 2019.2.27 Eclipse中的Tomcat设置Tomcat服务器手动重启