python 将歌词解析封装成类,要求:提供一个方法(根据时间返回歌词) - 提示:封装两个类:歌词类、歌词管理类
2024-09-03 18:36:11
自己写的 有更好方案的大佬可以讨论一下 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()
最新文章
- 微博mid和id转换
- 判断 Gym 100502K Train Passengers
- CCF真题之模板生成系统
- 【HAOI2009】【P1307】毛毛虫
- 选择排序的openMP实现
- 谈谈Javascript线程
- telnet IP不通/sybase central工具无法连接到数据库
- java javaEE javaWEB J2EE程序猿猿程序是脑损伤,终身工作程序猿
- Docker系统八:Docker的存储驱动
- 云计算--网络原理与应用--20171122--STP与HSRP
- Junit4 IDEA测试学习一
- alpha冲刺6/10
- mybatis隐藏不用的sql
- VB播放声音
- Prometheus Node_exporter 之 Network Sockstat
- VS2015安装与单元测试
- OpenACC 绘制曼德勃罗集
- Oracle创建库
- Linux 网络 I/O 模型简介(图文)
- TCP协议详解(理论篇)
热门文章
- 使用MDScratchImageView实现刮奖效果
- Python实例---利用正则实现计算器[FTL版]
- Centos7下面安装eclipse
- Exchange Server 产品路线图 及 补丁下载
- The Shapes of CSS(css的形状)
- java接口实例
- JavaScript事件的委派与事件的绑定
- POJ - 3476 A Game with Colored Balls---优先队列+链表(用数组模拟)
- Guava包学习---Lists
- 2019.2.27 Eclipse中的Tomcat设置Tomcat服务器手动重启