去除下载电影和电视剧文件名中的多余字符[python实现]

python

讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样),,搞得文件名好长,可以使用下面的Python代码,自行修改即可.

[python] view plaincopy

 

  1. #!\usr\bin\env python  
  2. # -*- coding: utf-8 -*-  
  3. # Author: 吴徐平  
  4. # FileName: RefineFileName.py  
  5. # Function:   
  6. # 下载的电影电视文件名太长,  
  7. # 常常含有多余的字符,如'中英双字幕',  
  8. # 可以使用本Python代码去掉  
  9. # Using python 2.7.X,win xp sp3  
  10.   
  11. import sys  
  12. import os  
  13. import re  
  14.   
  15.   
  16. # 文件夹目录列表  
  17. FileDirectoryList=[\  
  18. u"E:\\电视电影\\都市侠盗.Leverage",\  

  19. u"E:\\电视电影\\犯罪心理.Criminal.Minds",\  

  20. u"E:\\电视电影\\海军罪案调查处.NCIS",\  

  21. u"E:\\电视电影\\警察世家.Blue.Bloods"\  

  22. ]  
  23.   
  24. #文件名开头处是否需要添加的字符串  
  25. #不需要添加字符时,留空(或空白)字符来表示  
  26. AddStringList=[\  
  27. u'Leverage',\  

  28. u'Criminal.Minds',\  

  29. u'NCIS.',\  

  30. u'Blue.Bloods.'  

  31. ]  
  32.   
  33. # 文件名中必须去掉的字符  
  34. MustReplaceStringList=[\  
  35. u'都市侠盗',\  

  36. u'犯罪心理',\  

  37. u'海军罪案调查处',\  

  38. u'警察世家',\  

  39. u'人人影视',\  

  40. u'SFiles',\  

  41. u'YYeTs',\  

  42. ]  
  43.   
  44.   
  45.   
  46. # 去掉所有不必要的字符  
  47. NewString=u'';  

  48.   
  49. # 自定义重命名文件的函数  
  50. def RenameFileName(OldFileName,NewFileName):  
  51.     oldpath,oldfn = os.path.split(OldFileName)  
  52.     newpath,newfn = os.path.split(NewFileName)  
  53.     print(oldpath.encode('ascii','ignore'))  

  54.     os.rename(OldFileName, NewFileName)  
  55.     #print (oldfn.encode('ascii','ignore')+'  -->  '+newfn.encode('ascii','ignore'))        

  56.   
  57.   
  58. #正则表达式替换,最多一次,忽略大小写  
  59. def StringRegexReplace(pattern,repl,string):  
  60.     return  re.sub(pattern, repl, string, count=1, flags=re.I)    

  61.       
  62.   
  63.   
  64. # 循环#硬盘的电影电视剧所有目录下的文件  
  65. for FileDirectory in FileDirectoryList:      
  66.     FileNamesList=os.listdir(FileDirectory)      
  67.     # 循环重新命名文件  

  68.     for filenamei in FileNamesList:                 

  69.         # 首先去掉文件名中的空格字符  

  70.         RefinedFileName=filenamei.replace(u' ',NewString)  

  71.         # 循环必须去掉的文件名列表  

  72.         for MustReplaceString in MustReplaceStringList:  

  73.             RefinedFileName=RefinedFileName.replace(MustReplaceString,NewString)  
  74.         #去掉录制信息  

  75.         RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*rip(?=[\.\-_])','',RefinedFileName)  

  76.         RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])xvi[^.]*(?=[\.\-_])','',RefinedFileName)  

  77.         #去掉分辨率  

  78.         RefinedFileName=StringRegexReplace('\d{1,4}X\d{1,4}','',RefinedFileName)  

  79.         #去掉[*]里面的所有内容  

  80.         RefinedFileName=StringRegexReplace(u'\[.*\]','',RefinedFileName)  

  81.         #去掉网址  

  82.         RefinedFileName=StringRegexReplace(u'www\..*\.((com)|(net)|(cn)|(org))','',RefinedFileName)          

  83.         #去掉字幕(组)的字样  

  84.         RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*字幕组?','',RefinedFileName)  

  85.         #去掉出品和作品字样  

  86.         RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*[出作]品','',RefinedFileName)  

  87.         #去掉开头的点.下划线_连接符-等  

  88.         RefinedFileName=StringRegexReplace(u'^[._\-]','',RefinedFileName)   

  89.         # 经常出现两个点以上,直接替换成一个点  

  90.         RefinedFileName=RefinedFileName.replace(u'...',u'.')  

  91.         RefinedFileName=RefinedFileName.replace(u'..',u'.')  

  92.           
  93.           
  94.         # 可以重新命名了  

  95.         OldFileName=os.path.join(FileDirectory,filenamei)  
  96.         NewFileName=os.path.join(FileDirectory,RefinedFileName)   
  97.         RenameFileName(OldFileName,NewFileName)  
  98.   
  99.   
  100. ####下面的代码在文件头添加字符串  
  101. #判断是否已经添加了字符串  
  102. def HasAddString(AddString0,FileNameString0):  
  103.     if (len(AddString0.strip())<1):#AddString0为空字符不需要再添加任何字符了  

  104.         print('Empty AddString,No need to add to : '+ FileNameString0.encode('ascii','ignore'))  

  105.         return True  

  106.     else:              

  107.         AddString=AddString0.strip().lower()  
  108.         FileNameString=FileNameString0.strip().lower()  
  109.         if(len(FileNameString)<=len(AddString)):  

  110.             return False  

  111.         else:  

  112.                 if(FileNameString[0:(len(AddString)-1)]==AddString[0:(len(AddString)-1)]):  

  113.                     return True  

  114.                 else:  

  115.                     return False  

  116.           
  117.               
  118.   
  119. DirCounter=0;  

  120. # 循环#硬盘的电影电视剧所有目录下的文件  
  121. for FileDirectory in FileDirectoryList:  
  122.     FileNamesList=os.listdir(FileDirectory)  
  123.     AddString =AddStringList[DirCounter]  
  124.     DirCounter=DirCounter+1     

  125.     # 循环重新命名文件  

  126.     for filenamei in FileNamesList:                 

  127.         #已经加过的文件名不再添加字符了  

  128.         if HasAddString(AddString,filenamei):  

  129.             print(filenamei.encode('ascii','ignore')+' : ALready Added Header String!')  

  130.         else:  

  131.             # 首先连接字符串  

  132.             RefinedFileName=AddString+filenamei  
  133.             # 可以重新命名了  

  134.             OldFileName=os.path.join(FileDirectory,filenamei)  
  135.             NewFileName=os.path.join(FileDirectory,RefinedFileName)   
  136.             RenameFileName(OldFileName,NewFileName)  
  137.             print(filenamei.encode('ascii','ignore')+' :  Add Header String, OK!')  

  138.               
  139.                   
  140.           
  141.           


 

对文件名的修改有特殊要求的,可以将StringRegexReplace函数用上.

下面的电视剧文件名看起来舒服多了:

看看文件名是不是清爽许多.....

以上是 去除下载电影和电视剧文件名中的多余字符[python实现] 的全部内容, 来源链接: utcz.com/z/386510.html

回到顶部