zoukankan      html  css  js  c++  java
  • 合并百度影音的离线数据 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"
    ' % 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");      
    

      

      

  • 相关阅读:
    修改MyEclipse工作空间
    Servlet
    Java虚拟机类加载机制
    编译执行和解释执行
    awt和swing
    构造函数
    小知识点
    [剑指Offer]42-连续子数组的最大和/ [LeetCode]53. 最大子序和
    [剑指Offer]40-最小的k个数
    [剑指Offer]47-礼物的最大价值(DP)
  • 原文地址:https://www.cnblogs.com/febwave/p/3161801.html
Copyright © 2011-2022 走看看