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

Posted 清安无别事

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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————————

0607am抽象类&接口&析构方法&tostring&小知识点

/*
class ren
{
public static $color;//静态
static function ()
{
ren::$color;
self::$color;//self只能写在类里面,代表这分类
}
}

*/

//不能实例化的类:抽象类
abstract class Animal //关键字abstract
{
public $dong;
public $jiao;

function chi()
{

}
function shui()
{

}
}
class Ren extends Animal
{

}
$d=new Ren();
var_dump($d);

//接口:极度抽象的类,里面的方法要重写
//关键字 interface
//里面的方法没有函数体
//实现接口使用的关键字是implements,不是extends
//实现接口的子类必须要实现接口中的每个方法
interface Animal2 //不要加class
{

}
class Ren2 extends Animal2
{

}
//实例
interface USB
{
function Read();
function Write();
}
class Mouse implements USB
{
function Read()
{
echo "插入了鼠标";
}
function Write()
{
echo "通电给鼠标";
}
}
$m=new Mouse();
$m->read();
$m->Write();

//析构方法:在对象销毁之前,将内存释放,链接关闭and so on
class ren
{
public $name;
//析构方法
function __destruct()
{
echo "该对象销毁了";
}
}
//写法特殊:__destruct
//执行时间特殊,销毁时执行
$r=new ren();
$r->name="张丹";
var_dump($r);


//tostring可以在输出对象时候调用,必须有一个返回值
class ren
{
public $name;
public $sex;
public $age;
function run()
{

}
function show()
{
echo "name代表姓名,sex代表性别,age代表年龄";
}
function __tostring()
{
// return "name代表姓名,sex代表性别,age代表年龄";
return $this->name;
}
}
$r=new ren();
$r->show();

echo $r;

 

//其他小知识点
$a=10;
$b=20;
$c=25;

if(!isset($b)) //判断是否存在
{
echo "变量b不存在";
exit;//退出程序
die("变量B不存在!");//输出错误信息并且退出程序
}

echo $a+$b;
echo $a*$b;

//输出数组
$attr=array(1,2,3,4);
var_dump($attr);
print_r($attr);


echo "hello","haha";//可以输出多个字符串
print"helo";//只能输出一个

 

//加载类 命名:ren.class.php

class ren
{
public $name;
public $sex;
public function say()
{
echo "hello";
}
}

//引用类,加载类
include("ren.class.php");
require_once("ren.class.php");//写在文件顶端,如果出现错误,代码停止执行
require_once"ren.class.php";


//自动加载项
//1.所有的类的文件命名,要求使用同一个规则
//2.文件名里面必须有类名
//3.所有类文件必须在同一个文件夹下
//用的很少,
function __autolode($classname)
{
require $classname.".class.php";
}

以上是关于Python的知识点运用-2(排序&&找差值及修正ts合成顺序)的主要内容,如果未能解决你的问题,请参考以下文章

初学后缀数组记录(然而并不是很会。。&&很水。。)

利用Python进行冒泡排序

一个整数(排序)

排序01---[排序基本知识&&冒泡排序&&选择排序&&堆排序]

基于快速排序,寻找众数(出现最多的数),运用分治的思想

排序之归并排序