重新整理了一下代码。
增加了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" ' % 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 ' %(filebasename,extname)) objTar.write('cd .. ') 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");