zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

Python字符方法下载 实现 去除 文件名 电影
2023-06-13 09:15:46 时间

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

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

具体实现代码如下:

#!\usr\bin\envpython
#-*-coding:utf-8-*-
#Author:吴徐平
#FileName:RefineFileName.py
#Function:
#下载的电影电视文件名太长,
#常常含有多余的字符,如"中英双字幕",
#可以使用本Python代码去掉
#Usingpython2.7.X,winxpsp3

importsys
importos
importre

#文件夹目录列表
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"";

#自定义重命名文件的函数
defRenameFileName(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"))

#正则表达式替换,最多一次,忽略大小写
defStringRegexReplace(pattern,repl,string):
returnre.sub(pattern,repl,string,count=1,flags=re.I)

#循环#硬盘的电影电视剧所有目录下的文件
forFileDirectoryinFileDirectoryList:
FileNamesList=os.listdir(FileDirectory)
#循环重新命名文件
forfilenameiinFileNamesList:
#首先去掉文件名中的空格字符
RefinedFileName=filenamei.replace(u"",NewString)
#循环必须去掉的文件名列表
forMustReplaceStringinMustReplaceStringList:
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)

####下面的代码在文件头添加字符串
#判断是否已经添加了字符串
defHasAddString(AddString0,FileNameString0):
if(len(AddString0.strip())<1):#AddString0为空字符不需要再添加任何字符了
print("EmptyAddString,Noneedtoaddto:"+FileNameString0.encode("ascii","ignore"))
returnTrue
else:
AddString=AddString0.strip().lower()
FileNameString=FileNameString0.strip().lower()
if(len(FileNameString)<=len(AddString)):
returnFalse
else:
if(FileNameString[0:(len(AddString)-1)]==AddString[0:(len(AddString)-1)]):
returnTrue
else:
returnFalse

DirCounter=0;
#循环#硬盘的电影电视剧所有目录下的文件
forFileDirectoryinFileDirectoryList:
FileNamesList=os.listdir(FileDirectory)
AddString=AddStringList[DirCounter]
DirCounter=DirCounter+1
#循环重新命名文件
forfilenameiinFileNamesList:
#已经加过的文件名不再添加字符了
ifHasAddString(AddString,filenamei):
print(filenamei.encode("ascii","ignore")+":ALreadyAddedHeaderString!")
else:
#首先连接字符串
RefinedFileName=AddString+filenamei
#可以重新命名了
OldFileName=os.path.join(FileDirectory,filenamei)
NewFileName=os.path.join(FileDirectory,RefinedFileName)
RenameFileName(OldFileName,NewFileName)
print(filenamei.encode("ascii","ignore")+":AddHeaderString,OK!")

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

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

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