重新整理了一下代码。

增加了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");

  

  

最新文章

  1. .NET垃圾回收(GC)原理
  2. LoadRunner:视频教程、课件
  3. RESTEasy-Rest服务框架
  4. Hbase的配置和安装
  5. SharePoint 2010 中使用Ztree和EasyUI样式冲突问题
  6. 部署在IIS服务器的asp.net 网站,禁止访问指定类型文件
  7. thinkphp 模板显示display和assign的用法
  8. Redis 安装与配置
  9. Qt 5 如何修改打包好的应用程序图标
  10. DB_NAME、DB_UNIQUE_NAME、SERVICE_NAME和INSTANCE_NAME等的区别
  11. Eclipse IDE for Java EE Developers使用和新建工程helloworld
  12. hdu 5631 Rikka with Graph(图)
  13. Backtrack无线攻防(很任性的一篇)
  14. 关于大数据时代传统商业存储的思考: 中心存储 VS 分布式存储
  15. Edge Intelligence: On-Demand Deep Learning Model Co-Inference with Device-Edge Synergy
  16. Github Page搜索工具更新 - 探索功能
  17. java数据类型大转换
  18. EXCEL这样根据某单元格的内容来改变整行颜色
  19. Flask信号源码流程
  20. 为在python中使用dotnet程序安装clr

热门文章

  1. css3动画应用-音乐唱片旋转播放特效
  2. CRM 插件奇怪的报错
  3. Android 网络调试 adb tcpip 开启方法
  4. silverlight漂亮的文件上传进度显示原理及示例
  5. bzoj-1192 [HNOI2006]鬼谷子的钱袋(水题)
  6. 实现的是Linux和Windows之间的一种共享--samba
  7. hdu 3669(斜率优化DP)
  8. bzoj 1898
  9. sql server 变量 字符串拼接
  10. ASP.NET Core MVC 打造一个简单的图书馆管理系统 (修正版)(二)数据库初始化、基本登录页面以及授权逻辑的建立