python 将歌词解析封装成类,要求:提供一个方法(根据时间返回歌词) - 提示:封装两个类:歌词类、歌词管理类
自己写的 有更好方案的大佬可以讨论一下 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()
python 将歌词解析封装成类,要求:提供一个方法(根据时间返回歌词) - 提示:封装两个类:歌词类、歌词管理类的更多相关文章
- 把jQuery的类、插件封装成seajs的模块的方法
这篇文章主要介绍了把jQuery的类.插件封装成seajs的模块的方法,需要的朋友可以参考下 注:本文使用的seajs版本是2.1.1 一.把Jquery封装成seajs的模块 define(func ...
- java—将查询的结果封装成List<Map>与用回调函数实现数据的动态封装(44)
手工的开始QueryRunner类.实现数据封装: MapListHandler MapHandler BeanListHandler BeanHandler 第一步:基本的封装测试 写一个类,Que ...
- 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法
参考原贴地址:https://blog.csdn.net/clementad/article/details/47339519 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Trans ...
- 【转】在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational)的方法,注解失效的原因和解决方法
参考 原文链接 @Transactional does not work on method level 描述 在同一个类中,一个方法调用另外一个有注解(比如@Async,@Transational) ...
- 判断是否是同一人的方法——equals()?在Person类中提供一个比较的方法compare()返回boolean值?对象自己和自己比?
判断是否是同一人的方法——equals() 不能直接用per1==per2,这不是对象内容的比较而是存放对象地址的值得比较 在Person类中提供一个比较的方法compare()返回boolean值 ...
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
eclipse 中main()函数中的String[] args如何使用? 右击你的项目,选择run as中选择 run configuration,选择arguments总的program argu ...
- Hibernate的多表查询,分装到一个新的实体类中的一个方法
不知道是否还有其他方法实现,请高人指点. 如果涉及到多张表多字段查询,并且想利用查询出来的字段在界面层构建一个新的实体类,可以使用这种方法: 如果查询出来的多字段中,有多个字段的名字都相同(如想查询出 ...
- 把HTML5网页封装成APP,APK的方法
phonegap appcan HBuilder的native.js 推荐你用两个东西打包 一个是ionic,一个是hbuilder,Maven,apicloud http://mobi ...
- 28.按要求编写一个Java应用程序: (1)定义一个类,描述一个矩形,包含有长、宽两种属性,和计算面积方法。 (2)编写一个类,继承自矩形类,同时该类描述长方体,具有长、宽、高属性, 和计算体积的方法。 (3)编写一个测试类,对以上两个类进行测试,创建一个长方体,定义其长、 宽、高,输出其底面积和体积。
//矩形父类 package d922A; public class Rect { private double l,w; Rect(double c,double k) { l=c; w=k; } ...
随机推荐
- time random sys 模块
time模块 顾名思义就是时间模块 我们在之前就用过一些时间模块 比如你想要让打印的时间延迟就time.sleep() 首先我们知道这是一个时间操作的模块 它可以分为三种模式:时间戳模式.格式化时间模 ...
- 大数据实时计算工程师/Hadoop工程师/数据分析师职业路线图
http://edu.51cto.com/roadmap/view/id-29.html http://my.oschina.net/infiniteSpace/blog/308401 大数据实时计算 ...
- 沉淀,再出发:Java基础知识汇总
沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...
- 函数去抖(debounce)与 函数节流(throttle)
以下场景往往由于事件频繁被触发,因而频繁执行DOM操作.资源加载等重行为,导致UI停顿甚至浏览器崩溃. 1. window对象的resize.scroll事件 2. 拖拽时的mousemove事件 3 ...
- AngularCLI介绍及配置文件主要参数含义解析
使用Angular CLI可以快速,简单的搭建一个angular2或angular4项目,是只要掌握几行命令就能构建出前端架构的最佳实践,它本质也是使用了webpack来编译,打包,压缩等构建的事情, ...
- jquery实现的时间轴
代码 样式文件style.css 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ...
- angularJs的作用域和依赖注入
一.angularJs的作用域 &scope这是局部作用域,先在局部作用域中找,如果没有就在全局作用域中找 &rootScope这是全局作用域 <!DOCTYPE HTML&g ...
- Django中模型(一)
Django中模型(一) 一. 基本开发流程 1. 配置数据库 2. 定义模型类:一个模型类都在数据库中对应一张数据表 3. 生成迁移文件 4. ...
- webpack中热模块更新
Hot Module Replacement,热模块更新,很多时候会简写成HMR. "scripts": { "start": "webpack-de ...
- Mysql 用户权限管理--从 xxx command denied to user xxx
今天遇到一个mysql 权限的问题,即标题所述 xxx command denied to user xxx,一般mysql 这种报错,基本都属于当前用户没有进行该操作的权限,需要 root 用户授 ...