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


Posted in Python onSeptember 23, 2014

本文实例讲述了python实现去除下载电影和电视剧文件名中的多余字符的方法,是一个非常实用的技巧,分享给大家供大家参考。具体如下:

有时候我们讨厌下载电影和电视剧文件名中的多余字符(如网址和广告字样),搞得文件名好长!不便于查看,这时候就可以使用下面的Python代码,自行修改即可.

具体实现代码如下:

#!\usr\bin\env python 
# -*- coding: utf-8 -*- 
# Author: 吴徐平 
# FileName: RefineFileName.py 
# Function:  
# 下载的电影电视文件名太长, 
# 常常含有多余的字符,如'中英双字幕', 
# 可以使用本Python代码去掉 
# Using python 2.7.X,win xp sp3 
 
import sys 
import os 
import re 
 
# 文件夹目录列表 
FileDirectoryList=[\ 
u"E:\\电视电影\\都市侠盗.Leverage",\ 
u"E:\\电视电影\\犯罪心理.Criminal.Minds",\ 
u"E:\\电视电影\\海军罪案调查处.NCIS",\ 
u"E:\\电视电影\\警察世家.Blue.Bloods"\ 
] 
 
#文件名开头处是否需要添加的字符串 
#不需要添加字符时,留空(或空白)字符来表示 
AddStringList=[\ 
u'Leverage',\ 
u'Criminal.Minds',\ 
u'NCIS.',\ 
u'Blue.Bloods.' 
] 
 
# 文件名中必须去掉的字符 
MustReplaceStringList=[\ 
u'都市侠盗',\ 
u'犯罪心理',\ 
u'海军罪案调查处',\ 
u'警察世家',\ 
u'人人影视',\ 
u'SFiles',\ 
u'YYeTs',\ 
] 
 
# 去掉所有不必要的字符 
NewString=u''; 
 
# 自定义重命名文件的函数 
def RenameFileName(OldFileName,NewFileName): 
  oldpath,oldfn = os.path.split(OldFileName) 
  newpath,newfn = os.path.split(NewFileName) 
  print(oldpath.encode('ascii','ignore')) 
  os.rename(OldFileName, NewFileName) 
  #print (oldfn.encode('ascii','ignore')+' --> '+newfn.encode('ascii','ignore'))    
 
#正则表达式替换,最多一次,忽略大小写 
def StringRegexReplace(pattern,repl,string): 
  return re.sub(pattern, repl, string, count=1, flags=re.I)  
 
# 循环#硬盘的电影电视剧所有目录下的文件 
for FileDirectory in FileDirectoryList:   
  FileNamesList=os.listdir(FileDirectory)   
  # 循环重新命名文件 
  for filenamei in FileNamesList:         
    # 首先去掉文件名中的空格字符 
    RefinedFileName=filenamei.replace(u' ',NewString) 
    # 循环必须去掉的文件名列表 
    for MustReplaceString in MustReplaceStringList: 
      RefinedFileName=RefinedFileName.replace(MustReplaceString,NewString) 
    #去掉录制信息 
    RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*rip(?=[\.\-_])','',RefinedFileName) 
    RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])xvi[^.]*(?=[\.\-_])','',RefinedFileName) 
    #去掉分辨率 
    RefinedFileName=StringRegexReplace('\d{1,4}X\d{1,4}','',RefinedFileName) 
    #去掉[*]里面的所有内容 
    RefinedFileName=StringRegexReplace(u'\[.*\]','',RefinedFileName) 
    #去掉网址 
    RefinedFileName=StringRegexReplace(u'www\..*\.((com)|(net)|(cn)|(org))','',RefinedFileName)     
    #去掉字幕(组)的字样 
    RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*字幕组?','',RefinedFileName) 
    #去掉出品和作品字样 
    RefinedFileName=StringRegexReplace(u'(?<=[\.\-_])[^.]*[出作]品','',RefinedFileName) 
    #去掉开头的点.下划线_连接符-等 
    RefinedFileName=StringRegexReplace(u'^[._\-]','',RefinedFileName)  
    # 经常出现两个点以上,直接替换成一个点 
    RefinedFileName=RefinedFileName.replace(u'...',u'.') 
    RefinedFileName=RefinedFileName.replace(u'..',u'.') 
     
    # 可以重新命名了 
    OldFileName=os.path.join(FileDirectory,filenamei) 
    NewFileName=os.path.join(FileDirectory,RefinedFileName)  
    RenameFileName(OldFileName,NewFileName) 
 
####下面的代码在文件头添加字符串 
#判断是否已经添加了字符串 
def HasAddString(AddString0,FileNameString0): 
  if (len(AddString0.strip())<1):#AddString0为空字符不需要再添加任何字符了 
    print('Empty AddString,No need to add to : '+ FileNameString0.encode('ascii','ignore')) 
    return True 
  else:       
    AddString=AddString0.strip().lower() 
    FileNameString=FileNameString0.strip().lower() 
    if(len(FileNameString)<=len(AddString)): 
      return False 
    else: 
        if(FileNameString[0:(len(AddString)-1)]==AddString[0:(len(AddString)-1)]): 
          return True 
        else: 
          return False 
 
DirCounter=0; 
# 循环#硬盘的电影电视剧所有目录下的文件 
for FileDirectory in FileDirectoryList: 
  FileNamesList=os.listdir(FileDirectory) 
  AddString =AddStringList[DirCounter] 
  DirCounter=DirCounter+1   
  # 循环重新命名文件 
  for filenamei in FileNamesList:         
    #已经加过的文件名不再添加字符了 
    if HasAddString(AddString,filenamei): 
      print(filenamei.encode('ascii','ignore')+' : ALready Added Header String!') 
    else: 
      # 首先连接字符串 
      RefinedFileName=AddString+filenamei 
      # 可以重新命名了 
      OldFileName=os.path.join(FileDirectory,filenamei) 
      NewFileName=os.path.join(FileDirectory,RefinedFileName)  
      RenameFileName(OldFileName,NewFileName) 
      print(filenamei.encode('ascii','ignore')+' : Add Header String, OK!')

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

运行本文实例后可以看到下面的电视剧文件名看起来就舒服多了:

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

希望本文所述实例对大家的Python程序设计能有所帮助。

Python 相关文章推荐
python自动化工具日志查询分析脚本代码实现
Nov 26 Python
python实现进程间通信简单实例
Jul 23 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
Jul 09 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
分享几道你可能遇到的python面试题
Jul 24 Python
浅谈python中的占位符
Nov 09 Python
使用Django开发简单接口实现文章增删改查
May 09 Python
Python遍历字典方式就实例详解
Dec 28 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
使用Pytorch搭建模型的步骤
Nov 16 Python
python mongo 向数据中的数组类型新增数据操作
Dec 05 Python
Python urlopen()参数代码示例解析
Dec 10 Python
Python中的类学习笔记
Sep 23 #Python
Python函数嵌套实例
Sep 23 #Python
Python中的自定义函数学习笔记
Sep 23 #Python
Python中的exec、eval使用实例
Sep 23 #Python
Python的高级Git库 Gittle
Sep 22 #Python
Python实现抓取网页并且解析的实例
Sep 20 #Python
跟老齐学Python之字典,你还记得吗?
Sep 20 #Python
You might like
PHP中几个常用的魔术常量
2012/02/23 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
PHP+MySQL实现在线测试答题实例
2020/01/02 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
js 链式延迟执行DOME
2012/01/04 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
重构Javascript代码示例(重构前后对比)
2013/01/23 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
JavaScript中的数学运算介绍
2014/12/29 Javascript
jQuery设置和移除文本框默认值的方法
2015/03/09 Javascript
jQuery编程中的一些核心方法简介
2015/08/14 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
微信小程序如何使用云开发
2019/05/17 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
python str与repr的区别
2013/03/23 Python
Python中使用Queue和Condition进行线程同步的方法
2016/01/19 Python
python爬取m3u8连接的视频
2018/02/28 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
keras 自定义loss层+接受输入实例
2020/06/28 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
信息工程学院毕业生推荐信
2013/11/05 职场文书
会计出纳员的自我评价
2014/01/15 职场文书
劲霸男装广告词
2014/03/21 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
2014年派出所工作总结
2014/11/21 职场文书
2015年度村委会工作总结
2015/04/29 职场文书
2015年监理个人工作总结
2015/05/23 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
js作用域及作用域链工作引擎
2022/07/07 Javascript