python实现去除下载电影和电视剧文件名中的多余字符的方法
程序员文章站
2023-08-14 23:11:59
本文实例讲述了python实现去除下载电影和电视剧文件名中的多余字符的方法,是一个非常实用的技巧,分享给大家供大家参考。具体如下:
有时候我们讨厌下载电影和电视剧文件名中...
本文实例讲述了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程序设计能有所帮助。