讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样),,搞得文件名好长,可以使用下面的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实现]的更多相关文章

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

    转至:http://blog.csdn.net/zhuqinglu/article/details/2064013 在打开或者保存一个osg模型的时候,经常遇到中文路径或者中文文件名的问题,此时会提示 ...

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

    转载:http://blog.csdn.net/infoworld/article/details/42033097 场景: 1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的 ...

  3. 文件名中含有连续字符abc,相应文件中也含有字符串abc

    find ./ -name '*abc*' -exec grep 'abc' {} -H \; find ./ -name '*abc*' | xargs -I '{}' grep abc {} -H ...

  4. Linux查看当前目录下文件名中包含指定字符的文件

    find . -type f -name "edaijia* 结果:

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

    ajax里有需要判断反馈的字符串是否为“ok”,在浏览器里调试,看到返回的内容明明是“ok”,但是if(“ok”==data)判断为false,用alert打印内容也是ok,但是打印长度的时候却是3. ...

  6. 使用response.setHeader("Content-Disposition","attachment;filename="+fName)下载文件,中文文件名无法显示的问题

    今天遇到这么一个情况,在Action代码中进行文件下载: ActionForm得到file_id,通过file_id进行数据库查询得到file_name以及服务器硬盘上的file_uri,其中file ...

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

    最近在进行文件下载时发现一个问题,就是下面语句运行时,下载某些文件正常,下载某些文件异常,后来发现文件名中有空格的文件火狐浏览器是默认将文件名截断了的 response.setHeader(" ...

  8. 【.net】在ASP.NET中,IE与Firefox下载文件名中带中文汉字的文件,文件名乱码的问题

    #问题:客户端为ie或Firefox,服务端为asp.net时,下载文件名中包含中文汉字时,下载下来的文件的文件名是乱码: #解决方案: 示例代码:下载名称中带汉字的文件: public void P ...

  9. 火狐浏览器下载文件中文乱码,文件名中的空格变加号("+")的问题

    解决一下问题: 1.火狐浏览器下载文件,中文变乱码 2.IE浏览器下载文件,丢失文件扩展名或强制扩展名为".txt" 3.浏览器下载文件,文件名中的空格变成加号("+&q ...

随机推荐

  1. Unity UGUI —— 鼠标穿透UI问题(Unity官方的解决方法)

    解决方案 : http://www.cnblogs.com/fly-100/p/4570366.html 这里我们直接在使用Input.GetMouseButtonDown(0)的地方加了一个检测函数 ...

  2. 【Apache运维基础(1)】Apache的安装与使用

    安装 yum -y install httpd httpd-devel # 在Ubuntu里面叫做Apache2,输入localhost能打开就算成功了 额...当然专业的运维还是老老实实的去编译吧; ...

  3. 对于linux下system()函数的深度理解(整理)

    原谅: http://blog.sina.com.cn/s/blog_8043547601017qk0.html 这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同 ...

  4. Python中itertools模块

    itertools模块包含创建有效迭代器的函数,可以用各种方式对数据进行循环操作,此模块中的所有函数返回的迭代器都可以与for循环语句以及其他包含迭代器(如生成器和生成器表达式)的函数联合使用. ch ...

  5. VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)

    原文地址: VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)-软件开发-鸡啄米 http://www.jizhuomi.com/software/139.html   上一讲中鸡 ...

  6. brew命令

    下面参考下网友的总结: 查看brew的帮助 brew –help 安装软件 brew install git 卸载软件 brew uninstall git 搜索软件 brew search git ...

  7. Servlet小示例:jsp页面提交信息Servlet接收并打印输出

    该示例采用doPost方法提交表单,该示例一共包含两个文件. 一个是用来提交用户信息的表单userForm2.jsp,另一个是用来接收参数的Servlet. userForm2.jsp <%@ ...

  8. DefaultHashOperations multiget的一个坑

    DefaultHashOperations的multiget如果没有数据会返回java.util.Collections.EmptyList,这个List没有重写add方法. List<Long ...

  9. c语言头文件和源文件不在同一个目录

    http://www.cnblogs.com/ShaneZhang/archive/2013/05/20/3088688.html 从工程上讲,头文件的文件名应该与对应的源文件名相同便于维护,如果头文 ...

  10. Hibernate学习笔记(1)

    1 使用Hibernate (1)创建User Library,命名为HIBERNATE3,加入需要的jar (2)创建hibernate配置文件hibernate.cfg.xml, 为了便于调试最好 ...