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中的异常处理
Apr 28 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
用Python中的turtle模块画图两只小羊方法
Apr 09 Python
Python scrapy增量爬取实例及实现过程解析
Dec 24 Python
配置python的编程环境之Anaconda + VSCode的教程
Mar 29 Python
Django模板之基本的 for 循环 和 List内容的显示方式
Mar 31 Python
安装多个版本的TensorFlow的方法步骤
Apr 21 Python
Python接口自动化测试的实现
Aug 28 Python
Selenium 配置启动项参数的方法
Dec 04 Python
python help函数实例用法
Dec 06 Python
python函数的两种嵌套方法使用
Apr 02 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 Pear 安装及使用
2009/03/19 PHP
PHP常用代码大全(新手入门必备)
2010/06/29 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
使用PHP curl模拟浏览器抓取网站信息
2013/10/28 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
CodeIgniter启用缓存和清除缓存的方法
2014/06/12 PHP
javascript some()函数用法详解
2014/11/13 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
Linux平台PHP5.4设置FPM线程数量的方法
2016/11/09 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
js精度溢出解决方案
2012/12/02 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
微信小程序 扎金花简单实例
2017/02/21 Javascript
AngularJS实现的输入框字数限制提醒功能示例
2017/10/26 Javascript
微信小程序开发之改变data中数组或对象的某一属性值
2018/07/05 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
2018/11/15 Javascript
jQuery操作cookie的示例代码
2019/06/05 jQuery
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python 迭代器与生成器实例详解
2017/05/18 Python
简单谈谈python基本数据类型
2018/09/26 Python
Python实现蒙特卡洛算法小实验过程详解
2019/07/12 Python
银行财务部实习生的自我鉴定
2013/11/27 职场文书
地理教师岗位职责
2014/03/16 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
老干部工作先进集体事迹材料
2014/05/21 职场文书
反洗钱宣传活动总结
2014/08/26 职场文书
公司离职证明标准格式
2014/11/18 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
中秋晚会致辞
2015/07/31 职场文书
JVM上高性能数据格式库包Apache Arrow入门和架构详解(Gkatziouras)
2021/05/26 Servers