本章內(nèi)容,涉及到上一章的視頻爬蟲(chóng),但是問(wèn)題不大。最主要還是基礎(chǔ)內(nèi)容。
基礎(chǔ)內(nèi)容:排序,找出缺失值。
學(xué)習(xí)本章的前,我是建議去跑一遍gitee上的代碼的。
排序問(wèn)題由來(lái)
視頻獲取后,根據(jù)命名,排序是錯(cuò)的。問(wèn)題除了命名以外還有一個(gè)因素就是多線程并發(fā)的原因。
好了,看圖說(shuō)話;看到了嗎,順序還是很明顯不對(duì)的,這樣合成視頻的時(shí)候,那就是十分混亂的。所以需要解決一下。
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文件的,這正是我要處理的。
這樣看,基本上以對(duì)上了,沒(méi)錯(cuò)了。
為什么這么寫(xiě)?因?yàn)樯盗?。這樣本質(zhì)上并沒(méi)有排序。
這也證明了,代碼還是寫(xiě)少了。
思路是這樣沒(méi)錯(cuò),但是,其實(shí)并沒(méi)有必要。
正解: 我只需要獲取
with?open('res.txt','r',encoding='utf-8')?as?r:
??????values?=?r.read()
即可,為什么,不是需要排序然后合成嗎?
這就是誤區(qū),為什么一定要給ts文件排序?
為什么一定要讀取下載好的ts文件名稱進(jìn)行 合并,這不就把簡(jiǎn)單的事情復(fù)雜化了嗎!
我們只需要獲取.m3u8解析出來(lái)的ts文件名稱序列即可,因?yàn)檫@已經(jīng)是排序的了。然后我們提取關(guān)鍵字進(jìn)步查找合并即可。
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())
看到了嗎。挖取名稱,按照順序循環(huán),查找指定path中的文件名一一合并即可,不需要再對(duì)files中的ts文件進(jìn)行排序了。
再次排序這樣做會(huì)讓合并出的mp4播放起來(lái)卡頓。
找出缺失值
再上面的基礎(chǔ)上,我還整了一個(gè)錯(cuò)誤,
sorted_list?=?[x[-12:-4]?for?_,?x?in?sorted(zip(files[:-3],?eval(values)))]
嗯哼,瞬間麻痹,排序出來(lái)少了三個(gè)值,為此沒(méi)多想,直接找少了哪三個(gè)值。
你會(huì)怎么想?循環(huán)判斷?還是什么?
集合解法:
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)
這就搞定了,少了什么值就出來(lái)了。然而并沒(méi)有什么卵用,剛開(kāi)始的思路糾錯(cuò)了。
好了,本章修正后的獲取電影源碼放在了:https://gitee.com/qinganan_admin/reptile-case/tree/master/%E7%94%B5%E5%BD%B1文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-408896.html
——————修成合成順序.py————————文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-408896.html
到了這里,關(guān)于Python的知識(shí)點(diǎn)運(yùn)用-2(排序&&找差值及修正ts合成順序)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!