合并百度影音的离线数据 with python 第二版 基于yield
重新整理了一下代码。
增加了bdv,mkv的处理流程。
目前暂时支持windows平台。
bdv,mkv,rmvb的不同处理流程
# -*- coding: UTF-8 -*-
import os
import io
import sys
import string
import shutil
import codecs
def read_bdv_index(filename):
piece_list= list()
objFile = codecs.open(filename,'r','utf-8')
for line in objFile:
if(line[0:4] != 'file'):
continue;
strings = string.split(line,'/')
tarfile = strings[len(strings)-1]
tempText = string.strip(tarfile)
piece_list.append(tempText)
objFile.close()
return ('avi',piece_list)
def read_bdv_file(filename):
piece_list= list()
piece_list.append('*.bdv_*')
return ('avi',piece_list)
def read_rmvb_file(filename):
piece_list= list()
piece_list.append('*.rmvb_*')
return ('rmvb',piece_list)
def read_mkv_file(filename):
piece_list= list()
piece_list.append('*.mkv_*')
return ('mkv',piece_list)
执行代码:
# -*- coding: UTF-8 -*-
import os
import io
import codecs
import string
import shutil
import moviefmt
def coroutine(func):
def start(*args,**kwargs):
g = func(*args,**kwargs)
g.next()
return g
return start
@coroutine
def enum_movie_file(target):
selectedFolder = (yield)
for fileitem in os.listdir(selectedFolder):
targetFO = os.path.join(selectedFolder,fileitem)
if(os.path.isfile(targetFO) == True):
continue;
target.send(targetFO)
@coroutine
def read_movie_file(funcDisp,target):
while(True):
filmFolder = (yield)
for fileitem in os.listdir(filmFolder):
targetfile = os.path.join(filmFolder,fileitem)
if(os.path.isfile(targetfile) == False):
continue;
filebasename , fext = os.path.splitext(fileitem);
if(funcDisp.has_key(string.lower(fext))):
pfn = funcDisp[string.lower(fext)];
outputs = filmFolder,filebasename, pfn(targetfile);
target.send(outputs)
break
@coroutine
def create_report(outputfile):
objTar = codecs.open(outputfile,"w+")
while(1):
filmFolder,filebasename,(extname,piece_list) = (yield)
if(extname == None) :
break;
objTar.write('cd \"%s\"\r\n' % filmFolder)
objTar.write('copy /b ')
if(len(piece_list) == 1):
objTar.write('%s ' %(piece_list[0].encode('gbk')))
else:
bFirst = True
for line in piece_list:
if(bFirst == False):
objTar.write('+%s' %(line.encode('gbk')))
else:
objTar.write('%s' %(line.encode('gbk')))
bFirst = False
objTar.write(' ..\%s.%s\r\n' %(filebasename,extname))
objTar.write('cd ..\r\n')
objTar.close()
if __name__ == '__main__':
funcDisp = dict()
funcDisp['.bdv_0000']= moviefmt.read_bdv_file;
funcDisp['.rmvb_0000']= moviefmt.read_rmvb_file;
funcDisp['.mkv_0000']= moviefmt.read_mkv_file;
funcDisp['.bdv']= moviefmt.read_bdv_index;
try:
rmf = enum_movie_file(read_movie_file(funcDisp,create_report('film.bat')))
rmf.send(os.getcwd())
rmf.close()
except Exception as exc:
print("%s" % exc);
print("done");
浙公网安备 33010602011771号