软件开发|编程技术|编程代码|编程入门先学什么—程序设计语言

合并百度影音的离线数据( with python 2.3)

四种格式的解析:

filelist

slicelist

download.cfg

third_party_download.cfg

还是2个文件。替换之前版本即可。

初步测试正常,但时间轴不对。

代码如下:

# -*- coding: UTF-8 -*-import osimport ioimport codecsimport stringimport shutilimport moviefmtimport tracebackdef coroutine(func): def start(*args,**kwargs):  g = func(*args,**kwargs)  g.next()  return g return start@coroutinedef 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)  @coroutinedef 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(filebasename[0] == "."):    continue      if(funcDisp.has_key(string.lower(fext))):    pfn = funcDisp[string.lower(fext)];    (targetFmt,targetObjects,filmFolderEx,filebasenameEx) = pfn(targetfile)    if(targetFmt is None):     continue;    outputs = filmFolder,filebasename, (targetFmt,targetObjects,filmFolderEx,filebasenameEx);    # outputs = filmFolder,filebasename, pfn(targetfile);    target.send(outputs)    breakdef getWindowsText(orgText):  try:  return orgText.encode('gbk')  except Exception as exc:   print("%s" % exc);   return orgText@coroutinedef create_report(outputfile): objTar = codecs.open(outputfile,"w+")   while(1):  filmFolder,filebasename,(extname,piece_list,filmFolderEx,filebasenameEx) = (yield)  if(extname == None) :   break;  objTar.write('cd \"%s\"\r\n' % (filmFolderEx if filmFolderEx else filmFolder))    objTar.write('attrib -h *.*\r\n ')    if(len(piece_list) 1):   objTar.write('copy /b ')    else:   objTar.write('copy ')    if(len(piece_list) == 1):   objTar.write('\"%s \"' %(getWindowsText(piece_list[0])))  else:      bFirst = True   for line in piece_list:    if(bFirst == False):          objTar.write('+\"%s\"' %(getWindowsText(line)))     else:          objTar.write('\"%s\"' %(getWindowsText(line)))     bFirst = False  relpath = os.path.dirname(filmFolder)    currentPath = os.path.join(getWindowsText(relpath),getWindowsText(filebasenameEx if filebasenameEx else filebasename))   objTar.write(' %s.%s\r\n' % (currentPath,extname))      objTar.write('cd %s\r\n' %(relpath)) 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;    funcDisp['.mp4_0000']= moviefmt.read_mp4_file;    funcDisp['']= moviefmt.read_mkv_2_file;  funcDisp['.filelist'] = moviefmt.read_filelist_index; funcDisp['.slicelist'] = moviefmt.read_slicelist_index; funcDisp['.cfg'] = moviefmt.read_cfg_index; try:  rmf = enum_movie_file(read_movie_file(funcDisp,create_report('film.bat')))  rmf.send(os.getcwd())  rmf.close() except StopIteration:  pass except Exception as exc:   print("%s" % exc);   info = traceback.format_exc()  print(info)       print("done");  # -*- coding: UTF-8 -*-import osimport ioimport sysimport stringimport shutilimport codecsimport globimport redef read_bdv_index_V1(objFile): piece_list= list()  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) return "avi",piece_list,None,Nonedef read_bdv_index_V2(objFile): piece_list= list()  for line in objFile:    nPos = line.count('bdv')  if( nPos =0):   continue;    tarfile = line[0:len(line)-2]   piece_list.append(tarfile)  return "mpeg",piece_list,None,Nonedef read_bdv_index_V3(objFile): piece_list= list()    oneFile= os.path.basename(objFile)  piece_list.append(oneFile) return "avi",piece_list,None,Nonedef read_bdv_index_V4(objFile): piece_list= list()  #skip #EXT-X-MEDIA-SEQUENCE objFile.readline(); for line in objFile:  if(line.startswith('#')==True):   continue;    piece_list.append(line.replace('\r\n','')) return "avi",piece_list,None,Nonedef count_file_item(objFile,extText): cItem = 0; folderName = os.path.dirname(objFile) for fileitem in os.listdir(folderName):   filebasename , fext = os.path.splitext(fileitem);   if(fext == extText):   cItem = cItem +1 return cItem def read_bdv_index(filename): piece_list= list()  ext_type = None filmFolderEx = None filebasenameEx = None # total file count cItem = count_file_item(filename,".bdv") if(cItem == 1):  ext_type,piece_list,filmFolderEx,filebasenameEx = read_bdv_index_V3(filename) else:  objFile = codecs.open(filename,'r','utf-8')   topline = objFile.readline();  bdv_ver = topline.replace("\r\n","")  if(bdv_ver == '#EXTM3U'):   v3Text = objFile.readline();   if(v3Text.startswith('#EXT-X-TARGETDURATION') == False):    ext_type,piece_list = read_bdv_index_V2(objFile)   else:    ext_type,piece_list = read_bdv_index_V4(objFile)  else:   ext_type,piece_list = read_bdv_index_V1(objFile)  objFile.close()   return (ext_type ,piece_list,filmFolderEx,filebasenameEx)  def read_bdv_file(filename): piece_list= list() piece_list.append('*.bdv_*') return ('avi',piece_list,None,None)def read_rmvb_file(filename): piece_list= list() piece_list.append('*.rmvb_*') return ('rmvb',piece_list,None,None)def read_mkv_file(filename): piece_list= list()  piece_list.append('*.mkv_*') return ('mkv',piece_list,None,None)def read_mp4_file(filename): piece_list= list()  piece_list.append('*.mp4_*') return ('mp4',piece_list,None,None)def read_mkv_2_file(filename): piece_list= list()  piece_list.append('video_*') return ('mkv',piece_list,None,None)def read_filelist_index(filename): filmFolderEx = None filebasenameEx = None objFile = codecs.open(filename,'r','utf-8')  topline = objFile.readline(); bdv_ver = topline.replace("\r\n","") if(bdv_ver == '#EXTM3U'):  v3Text = objFile.readline();  if(v3Text.startswith('#EXT-X-TARGETDURATION') == False):   ext_type,piece_list,filmFolderEx,filebasenameEx = read_bdv_index_V2(objFile)  else:   ext_type,piece_list,filmFolderEx,filebasenameEx = read_bdv_index_V4(objFile)    else:  ext_type,piece_list,filmFolderEx,filebasenameEx = read_bdv_index_V1(objFile) objFile.close()   return ("mp4" ,piece_list,filmFolderEx,filebasenameEx)    def read_slicelist_index(filename): piece_list= list()  objFile = codecs.open(filename,'r','utf-8')  topline = objFile.readline(); bdv_ver = topline.replace("\r\n","") if(bdv_ver == '#BD-SECTION'):   while(True):   currentLine = objFile.readline();   if(currentLine is None or len(currentLine) ==0):    break   piece_list.append(currentLine.replace("\r\n","")) objFile.close()   return ('mp4',piece_list,None,None)def read_cfg_index(filename): piece_list= list()  simpleFileName = os.path.basename(filename) if(simpleFileName == 'download.cfg'):  simpleFolderName = os.path.dirname(filename)  chkLst =glob.glob(os.path.join(simpleFolderName, '*.filelist'));  if(chkLst is not None and len(chkLst) 0):   return (None,None,None,None)  chkLst =glob.glob(os.path.join(simpleFolderName, '*.bdv'));  piece_list.append(chkLst[0]);  return ('avi',piece_list) if(simpleFileName != 'third_party_download.cfg'):  raise Exception('unknown format file : %s' %(filename)) reObj = re.compile('(Pvar_key\S+):(Pvar_value\S+)',re.IGNORECASE) lineDict = dict()# [orgLines.append(orgLine.replace("\r\n","") ) for orgLine in codecs.open(filename,'r','utf-8')] for orgLine in codecs.open(filename,'r','utf-8'):  orgLine = orgLine.replace("\r\n","")    results = reObj.findall(orgLine)  if(len(results)  0):   lineDict[results[0][0]] =results[0][1] resID = lineDict["resource"]  vid = lineDict[ '%s_vid'%(resID)] targetName = lineDict["video_name"] simpleFolderName = os.path.dirname(filename) upLevelFolderName = os.path.dirname(simpleFolderName) targetFolder = os.path.join(upLevelFolderName,vid) targetFolder = os.path.join(targetFolder,vid) chkLst =glob.glob(os.path.join(targetFolder, '*.%s*' %(resID))); targetFile = chkLst[0]   #skip #EXT-X-MEDIA-SEQUENCE  for line in codecs.open(targetFile,'r','utf-8'):  if(line.startswith('#')==True):   continue;    line = os.path.basename(line.replace('\r\n',''))  line = os.path.basename(line.replace('\r',''))  line = os.path.basename(line.replace('\n',''))  piece_list.append(line ) return ('avi',piece_list,targetFolder,targetName)

以上就是本文的全部内容,希望大家喜欢。