去除下载电影和电视剧文件名中的多余字符[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函数用上.

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

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

posted @ 2014-09-23 08:47  juggd  阅读(838)  评论(0编辑  收藏  举报