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使用lxml模块和Requests模块抓取HTML页面的教程
May 16 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
50行Python代码实现人脸检测功能
Jan 23 Python
Python学生信息管理系统修改版
Mar 13 Python
Selenium定时刷新网页的实现代码
Oct 31 Python
Python实现简单查找最长子串功能示例
Feb 26 Python
简单了解python中对象的取反运算符
Jul 01 Python
django的auth认证,authenticate和装饰器功能详解
Jul 25 Python
使用Python实现 学生学籍管理系统
Nov 26 Python
Tensorflow使用Anaconda、pycharm安装记录
Jul 29 Python
Python字符串及文本模式方法详解
Sep 10 Python
Python Selenium操作Cookie的实例方法
Feb 28 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 5.3 下载时 VC9、VC6、Thread Safe、Non Thread Safe的区别分析
2011/03/28 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
2019/05/13 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
javascript 图片上传预览-兼容标准
2009/06/01 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
js data日期初始化的5种方法
2013/12/29 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
javascript定义变量时带var与不带var的区别分析
2015/01/12 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
jQuery实现模拟flash头像裁切上传功能示例
2016/12/11 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
layui prompt 设置允许空白提交的方法
2019/09/24 Javascript
jQuery操作元素的内容和样式完整实例分析
2020/01/10 jQuery
js实现筛选功能
2020/11/24 Javascript
[43:41]OG vs Newbee 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
Python 列表(List) 的三种遍历方法实例 详解
2017/04/15 Python
在centos7中分布式部署pyspider
2017/05/03 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
深入剖析HTML5 内联框架iFrame
2016/05/04 HTML / CSS
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
广州盈通面试题
2015/12/05 面试题
小学英语课后反思
2014/04/26 职场文书
中秋节活动总结
2014/08/29 职场文书
党的群众路线教育实践活动个人整改措施落实情况
2014/11/04 职场文书
北京英文导游词
2015/02/12 职场文书
党支部鉴定意见
2015/06/02 职场文书
国王的演讲观后感
2015/06/03 职场文书
致运动员的广播稿
2015/08/19 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书