讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样),,搞得文件名好长,可以使用下面的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. git Unstaged changes after reset

    转载:http://my.oschina.net/yuzn/blog/150275 相信大家都做过这个操作,就是本地做了修改后,不想提交,想恢复如初 git reset HEAD   这样的话,我们就 ...

  2. ios开发--27个提升效率的iOS开源库推荐

    超长慎入列表: DZNEmptyDataSet(UI,空表格视图解算器) PDTSimpleCalendar(UI,drop-in日历组件) MagicalRecord(实施活跃记录模式的Core D ...

  3. Android:查看应用创建的数据库

    每个Android应用程序都可以使用SQLite数据库.它创建的位置在data/data/<项目文件夹>/databases/ 运行后打开,window->show view-> ...

  4. managedQuery和query的区别,

    我们都知道在Android系统中,SQLite数据库的相关操作方式被封装为内容提供Content Provider,可以帮助那些不会SQL语言的开发者快速实现Android平台上的数据库操作,但是平时 ...

  5. 在Linux中创建静态库和动态库

    我们通常把一些公用函数制作成函数库,供其它程序使用. 函数库分为静态库和动态库两种. 静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库. 动态库在程序编译时并不会被连接到目标代码中 ...

  6. POJ 3252 Round Numbers(组合)

    题目链接:http://poj.org/problem?id=3252 题意: 一个数的二进制表示中0的个数大于等于1的个数则称作Round Numbers.求区间[L,R]内的 Round Numb ...

  7. HDU 1166 敌兵布阵 (线段树 单点更新)

    题目链接 线段树掌握的很差,打算从头从最简单的开始刷一波, 嗯..就从这个题开始吧! #include <iostream> #include <cstdio> #includ ...

  8. Codeforces Round #248 (Div. 2) C. Ryouko's Memory Note (vector 替换)

    题目链接 题意:给m个数字, 这些数字都不大于 n,  sum的值为相邻两个数字 差的绝对值.求这n个数字里把一个数字 用 其中另一个数字代替以后, 最小的sum值. 分析:刚开始以为两个for 最坏 ...

  9. ha_innobase::rnd_next

    /*****************************************************************//** Reads the next row in a table ...

  10. HDU 3467 (求五个圆相交面积) Song of the Siren

    还没开始写题解我就已经内牛满面了,从晚饭搞到现在,WA得我都快哭了呢 题意: 在DotA中,你现在1V5,但是你的英雄有一个半径为r的眩晕技能,已知敌方五个英雄的坐标,问能否将该技能投放到一个合适的位 ...