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避免死锁方法实例分析
Jun 04 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
Python学习入门之区块链详解
Jul 25 Python
Python实现解析Bit Torrent种子文件内容的方法
Aug 29 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
Dec 12 Python
Python实现屏幕截图的两种方式
Feb 05 Python
numpy.std() 计算矩阵标准差的方法
Jul 11 Python
python绘制多个曲线的折线图
Mar 23 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
python pandas获取csv指定行 列的操作方法
Jul 12 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
python自动化办公操作PPT的实现
Feb 05 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添加MySQL数据记录代码
2008/06/07 PHP
fleaphp crud操作之find函数的使用方法
2011/04/23 PHP
php利用cookie实现访问次数统计代码
2011/05/19 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
微信 getAccessToken方法详解及实例
2016/11/23 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
关于全局变量和局部变量的那些事
2013/01/11 Javascript
javascript数组的使用
2013/03/28 Javascript
JavaScript动态插入script的基本思路及实现函数
2013/11/11 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
使用AJAX实现Web页面进度条的实例分享
2016/05/06 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
JS点击某个图标或按钮弹出文件选择框的实现代码
2016/09/27 Javascript
jquery+Jscex打造游戏力度条
2020/09/12 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
老生常谈js数据类型
2017/08/03 Javascript
基于vue的换肤功能的示例代码
2017/10/10 Javascript
JavaScrip数组去重操作实例小结
2019/06/20 Javascript
java遇到微信小程序 &quot;支付验证签名失败&quot; 问题解决
2019/12/22 Javascript
JavaScript canvas实现跟随鼠标事件
2020/02/10 Javascript
深入理解Python中字典的键的使用
2015/08/19 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
python统计中文字符数量的两种方法
2019/01/31 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Pytorch模型转onnx模型实例
2020/01/15 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
欧迪办公美国官网:Office Depot
2016/08/22 全球购物
买卖正宗运动鞋:GOAT
2019/12/06 全球购物
金蝶的一道SQL笔试题
2012/12/18 面试题
高三历史教学反思
2014/01/09 职场文书
销售人员职业生涯规划范文
2014/03/01 职场文书
企业精细化管理实施方案
2014/03/23 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
Python基础知识之变量的详解
2021/04/14 Python
实例讲解Python中sys.argv[]的用法
2021/06/03 Python
搞笑Gif:这么白这么长的腿像极了一楼的女朋友
2022/03/21 杂记