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

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

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

时间: 2024-10-16 10:13:35

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

解决osg路径与文件名中的中文字符问题

转至:http://blog.csdn.net/zhuqinglu/article/details/2064013 在打开或者保存一个osg模型的时候,经常遇到中文路径或者中文文件名的问题,此时会提示无法打开或者保存.当然,我们可以完全避免它,直接不使用中文字符,可是客户是苛刻的,有些小问题是必须解决的. 假设你想把node节点保存到E盘下的保存目录中,重新命名为牛.ive 此时只需调用一下代码: setlocale( LC_ALL, "chs" ); osgDB::writeNode

[C/C++标准库]_[初级]_[过滤Windows文件名中的非法字符]

场景: 1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的字符,但是有些字符在windows上是不能作为文件名的,强行创建这类文件会失败. 2.一般可以通过正则表达式替换所有的非法字符,这里实现的是C++98 template(模板)方式的替换无效字符,std::string,std::wstring. 基本上windows上和字符串打交道都离不开wstring. 函数: template<class T> void FilterInvalidFileNameChar(

过滤Windows文件名中的非法字符

转载:http://blog.csdn.net/infoworld/article/details/42033097 场景: 1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的字符,但是有些字符在windows上是不能作为文件名的,强行创建这类文件会失败. 2.一般可以通过正则表达式替换所有的非法字符,这里实现的是C++98 template(模板)方式的替换无效字符,std::string,std::wstring. 基本上windows上和字符串打交道都离不开wstr

php上传文件名中包含中文字符的附件

我们在上传附件的时候,常会要上传一些附件名称包含中文字符的附件,上传成功之后,会发现上传的附件其实是一个空文件.我就遇到过这类问题. 下面我们来解决这类问题 解决这类问题其实很简单 例如我们的php编码是utf-8,我们只要在move_uploaded_file()的时候,将保存附件的路径编码换成和php编码一致就可以解决 如下代码就能解决 move_uploaded_file($file["tmp_name"], iconv("utf-8","utf-8

ajax成功返回数据中存在多余字符的处理

ajax里有需要判断反馈的字符串是否为“ok”,在浏览器里调试,看到返回的内容明明是“ok”,但是if(“ok”==data)判断为false,用alert打印内容也是ok,但是打印长度的时候却是3. 于是把返回内容每个字符的16进制打出来 var hexCharCode = []; hexCharCode.push("0x"); for(var i = 0; i < data.length; i++) { hexCharCode.push((data.charCodeAt(i)

shell脚本:批量修改文件名(删除文件名中字符)

shell脚本:批量修改文件名(文件名中添加字符) 上一篇写过批量修改文件名(文件名中添加字符),工作中还存在这样的需求,批量修改文件名,删除文件名中的某些字符: 举例如下:批量改名,删除文件名中多余字符 目录下文件名为如下,要求去掉_finished. stu_102999_1_finished.jpg stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg stu_102999_5_finis

ftp下载指定日期文件(文件名中含日期)

网上查了很多,但是执行都各种错误,然后自己研究了半天,整了个能用的 要求:FTP文件名中含日期 步骤:将一下代码保存为BAT脚本,配置定时任务即可 @echo offrem 计算指定天数之前的日期set DaysAgo=1rem 假设系统日期的格式为yyyy-mm-ddcall :DateToDays %date:~0,4% %date:~5,2% %date:~8,2% PassDaysset /a PassDays-=%DaysAgo%call :DaysToDate %PassDays%

Java批量去除文件名中的广告字段

最近下了淘宝到的极客学院视频,但是发现附带了好多广告文件并且所有文件都加了广告后缀(如图).我没有强迫症但也觉得实在不爽. 首先我通过windows自带的搜索功能删除了所有的广告文件,这很简单,就不说了. 然后我通过查找资料,写了一个Java程序删掉了所有文件的广告字段,下面是代码: import java.io.File; /** *自动扫描文件夹下的所有文件并去除文件名中的广告字段 */ public class Main2 { //在此输入要删去的广告内容 public static fi

response.setHeader(&quot;Content-disposition&quot;,&quot;attachment;filename=&quot;+fileName) 下载时文件名中存在空格错误

最近在进行文件下载时发现一个问题,就是下面语句运行时,下载某些文件正常,下载某些文件异常,后来发现文件名中有空格的文件火狐浏览器是默认将文件名截断了的 response.setHeader("Content-disposition","attachment;filename="+new String(fileName.getBytes("gb2312"),"iso8859-1")); 但是在IE上面就是正常的,解决问题的方法有