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

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

  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. import sys
  11. import os
  12. import re
  13. # 文件夹目录列表
  14. FileDirectoryList=[\
  15. u"E:\\电视电影\\都市侠盗.Leverage",\
  16. u"E:\\电视电影\\犯罪心理.Criminal.Minds",\
  17. u"E:\\电视电影\\海军罪案调查处.NCIS",\
  18. u"E:\\电视电影\\警察世家.Blue.Bloods"\
  19. ]
  20. #文件名开头处是否需要添加的字符串
  21. #不需要添加字符时,留空(或空白)字符来表示
  22. AddStringList=[\
  23. u'Leverage',\
  24. u'Criminal.Minds',\
  25. u'NCIS.',\
  26. u'Blue.Bloods.'
  27. ]
  28. # 文件名中必须去掉的字符
  29. MustReplaceStringList=[\
  30. u'都市侠盗',\
  31. u'犯罪心理',\
  32. u'海军罪案调查处',\
  33. u'警察世家',\
  34. u'人人影视',\
  35. u'SFiles',\
  36. u'YYeTs',\
  37. ]
  38. # 去掉所有不必要的字符
  39. NewString=u'';
  40. # 自定义重命名文件的函数
  41. def RenameFileName(OldFileName,NewFileName):
  42. oldpath,oldfn = os.path.split(OldFileName)
  43. newpath,newfn = os.path.split(NewFileName)
  44. print(oldpath.encode('ascii','ignore'))
  45. os.rename(OldFileName, NewFileName)
  46. #print (oldfn.encode('ascii','ignore')+'  -->  '+newfn.encode('ascii','ignore'))
  47. #正则表达式替换,最多一次,忽略大小写
  48. def StringRegexReplace(pattern,repl,string):
  49. return  re.sub(pattern, repl, string, count=1, flags=re.I)
  50. # 循环#硬盘的电影电视剧所有目录下的文件
  51. for FileDirectory in FileDirectoryList:
  52. FileNamesList=os.listdir(FileDirectory)
  53. # 循环重新命名文件
  54. for filenamei in FileNamesList:
  55. # 首先去掉文件名中的空格字符
  56. RefinedFileName=filenamei.replace(u' ',NewString)
  57. # 循环必须去掉的文件名列表
  58. for MustReplaceString in MustReplaceStringList:
  59. RefinedFileName=RefinedFileName.replace(MustReplaceString,NewString)
  60. #去掉录制信息
  61. RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*rip(?=[\.\-_])','',RefinedFileName)
  62. RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])xvi[^.]*(?=[\.\-_])','',RefinedFileName)
  63. #去掉分辨率
  64. RefinedFileName=StringRegexReplace('\d{1,4}X\d{1,4}','',RefinedFileName)
  65. #去掉[*]里面的所有内容
  66. RefinedFileName=StringRegexReplace(u'\[.*\]','',RefinedFileName)
  67. #去掉网址
  68. RefinedFileName=StringRegexReplace(u'www\..*\.((com)|(net)|(cn)|(org))','',RefinedFileName)
  69. #去掉字幕(组)的字样
  70. RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*字幕组?','',RefinedFileName)
  71. #去掉出品和作品字样
  72. RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*[出作]品','',RefinedFileName)
  73. #去掉开头的点.下划线_连接符-等
  74. RefinedFileName=StringRegexReplace(u'^[._\-]','',RefinedFileName)
  75. # 经常出现两个点以上,直接替换成一个点
  76. RefinedFileName=RefinedFileName.replace(u'...',u'.')
  77. RefinedFileName=RefinedFileName.replace(u'..',u'.')
  78. # 可以重新命名了
  79. OldFileName=os.path.join(FileDirectory,filenamei)
  80. NewFileName=os.path.join(FileDirectory,RefinedFileName)
  81. RenameFileName(OldFileName,NewFileName)
  82. ####下面的代码在文件头添加字符串
  83. #判断是否已经添加了字符串
  84. def HasAddString(AddString0,FileNameString0):
  85. if (len(AddString0.strip())<1):#AddString0为空字符不需要再添加任何字符了
  86. print('Empty AddString,No need to add to : '+ FileNameString0.encode('ascii','ignore'))
  87. return True
  88. else:
  89. AddString=AddString0.strip().lower()
  90. FileNameString=FileNameString0.strip().lower()
  91. if(len(FileNameString)<=len(AddString)):
  92. return False
  93. else:
  94. if(FileNameString[0:(len(AddString)-1)]==AddString[0:(len(AddString)-1)]):
  95. return True
  96. else:
  97. return False
  98. DirCounter=0;
  99. # 循环#硬盘的电影电视剧所有目录下的文件
  100. for FileDirectory in FileDirectoryList:
  101. FileNamesList=os.listdir(FileDirectory)
  102. AddString =AddStringList[DirCounter]
  103. DirCounter=DirCounter+1
  104. # 循环重新命名文件
  105. for filenamei in FileNamesList:
  106. #已经加过的文件名不再添加字符了
  107. if HasAddString(AddString,filenamei):
  108. print(filenamei.encode('ascii','ignore')+' : ALready Added Header String!')
  109. else:
  110. # 首先连接字符串
  111. RefinedFileName=AddString+filenamei
  112. # 可以重新命名了
  113. OldFileName=os.path.join(FileDirectory,filenamei)
  114. NewFileName=os.path.join(FileDirectory,RefinedFileName)
  115. RenameFileName(OldFileName,NewFileName)
  116. print(filenamei.encode('ascii','ignore')+' :  Add Header String, OK!')

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

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

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

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

上一篇:matlab color_rain colorbar


下一篇:64bit ubuntu14.04编译PlatinumKit出现的arm-linux-androideabi-g++: not found错误解决方法