Python的知识点运用-2(排序&&找差值及修正ts合成顺序)

简介: Python的知识点运用-2(排序&&找差值及修正ts合成顺序)

基础内容:排序,找出缺失值。

学习本章的前,我是建议去跑一遍gitee上的代码的。


排序问题由来

视频获取后,根据命名,排序是错的。问题除了命名以外还有一个因素就是多线程并发的原因。

好了,看图说话;看到了吗,顺序还是很明显不对的,这样合成视频的时候,那就是十分混乱的。所以需要解决一下。

def sava_Video(self):
        """合成代码"""
        path = 'report/'
        save_list = []
        files = os.listdir(path)
        print(len(files),[_[:-3] for _ in files])
        with open('res.txt','r',encoding='utf-8') as r:
            values = r.read()
            sorted_list = [x[-12:-4] for _, x in sorted(zip(files, eval(values)))]
            print(len(sorted_list),sorted_list)

总体的代码就是这样了。跑一下看看:

看到,还是不一样啊,别急,上面的打印是ts文件的,这正是我要处理的。

这样看,基本上以对上了,没错了。

为什么这么写?因为傻了。这样本质上并没有排序。

这也证明了,代码还是写少了。

思路是这样没错,但是,其实并没有必要。

正解: 我只需要获取

with open('res.txt','r',encoding='utf-8') as r:
      values = r.read()

即可,为什么,不是需要排序然后合成吗?

这就是误区,为什么一定要给ts文件排序?

为什么一定要读取下载好的ts文件名称进行 合并,这不就把简单的事情复杂化了吗!

我们只需要获取.m3u8解析出来的ts文件名称序列即可,因为这已经是排序的了。然后我们提取关键字进步查找合并即可。

def sava_Video(self):
        """合成代码"""
        path = 'report/'
        files = os.listdir(path)
        print(len(files),[_[:-3] for _ in files])
        with open('res.txt','r',encoding='utf-8') as r:
            values = r.read()
        for file_path in eval(values):
            with open(path+file_path[-12:-4]+'.ts', 'rb') as f1:
                with open(path + "电影.mp4", 'ab') as f2:
                            f2.write(f1.read())

看到了吗。挖取名称,按照顺序循环,查找指定path中的文件名一一合并即可,不需要再对files中的ts文件进行排序了。

再次排序这样做会让合并出的mp4播放起来卡顿。

找出缺失值

再上面的基础上,我还整了一个错误,

sorted_list = [x[-12:-4] for _, x in sorted(zip(files[:-3], eval(values)))]

嗯哼,瞬间麻痹,排序出来少了三个值,为此没多想,直接找少了哪三个值。

你会怎么想?循环判断?还是什么?

集合解法:

file_set = set([_[:-3] for _ in files])
list_set = set(sorted_list)
missing_set = file_set - list_set
missing_values = list(missing_set)
print("缺失值:",missing_values)

这就搞定了,少了什么值就出来了。然而并没有什么卵用,刚开始的思路纠错了。

好了,本章修正后的获取电影源码放在了:https://gitee.com/qinganan_admin/reptile-case/tree/master/%E7%94%B5%E5%BD%B1

——————修成合成顺序.py————————

目录
相关文章
|
6月前
|
Ubuntu Linux 数据安全/隐私保护
内核实验(七):使用内核KFIFO环形缓冲区机制
本文通过一个内核模块实验,演示了如何在Linux内核中使用KFIFO环形缓冲区机制,包括定义KFIFO、编写驱动程序以及在Qemu虚拟机中进行编译、部署和测试,展示了KFIFO在无需额外加锁的情况下如何安全地在读者和写者线程间进行数据传输。
277 0
内核实验(七):使用内核KFIFO环形缓冲区机制
|
4月前
|
存储 C语言
操作多级(一、二、三级)指针才是我们的该有的姿态~
本文通过一道C语言编程题目,详细解析了多级指针的加减操作,包括二级指针和三级指针的使用,以及如何理解指针的地址计算过程,帮助读者巩固和理解指针概念。
125 0
|
消息中间件 物联网 Java
springboot + rabbitmq 做智能家居,我也没想到会这么简单
springboot + rabbitmq 做智能家居,我也没想到会这么简单
1389 0
springboot + rabbitmq 做智能家居,我也没想到会这么简单
|
5月前
|
网络协议 算法 数据安全/隐私保护
HTTP2和HTTP3区别?HTTP2有什么缺点?
总的来说,如果把HTTP/2比作是优化过的汽车,那HTTP/3就像是直升飞机,它不仅飞得快,而且即使前面有障碍也不会轻易停下。想要网站速度更快,HTTP/3无疑提供了更好的选择。
338 3
|
5月前
|
供应链 安全 物联网
NFC(近场通信)技术及其工作原理详解
NFC(近场通信)技术及其工作原理详解
1721 11
|
9月前
|
传感器 数据采集 IDE
【ESP32双核运行Freertos及互斥量】
【ESP32双核运行Freertos及互斥量】
528 0
|
存储 JSON IDE
esp32之解析json
esp32之解析json
587 0
|
4月前
|
数据采集 JavaScript 前端开发
【逆向基础】JS逆向入门:小白也可以看懂
【逆向基础】JS逆向入门:小白也可以看懂
|
存储 安全 物联网
搞懂Nfc刷卡看这篇就够了
搞懂Nfc刷卡看这篇就够了
5210 1
|
开发工具 git C++
【Git】stash 仅贮存指定文件的修改
如何使用 git stash 贮存单个或多个文件
3401 0

热门文章

最新文章

推荐镜像

更多