python实现去除下载电影和电视剧文件名中的多余字符的方法
作者:shichen2014 发布时间:2022-08-17 16:17: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程序设计能有所帮助。


猜你喜欢
- zyw147 提出问题:ASP读取指定xml 的节点?怎么用ASP《不是JS》取出指定的节点? 例如我想取出北京,我在ASP客户端提交的是
- 正在看的ORACLE教程是:Oracle数据安全面面观。
- 很多序列的方法字符串同样适用,但是,字符串是不可变的,所以一些试图改变字符串的方法是不可用的1 字符串格式化1)用元组或者字典格式化字符串f
- 如果你使用的正是mysql数据库,那么你把密码或者其他敏感重要信息保存在应用程序里的机会就很大。保护这些数据免受黑客或者窥探者的获取是一个令
- Numpy支持大量的维度数组和矩阵运算,对数组运算提供了大量的数学函数库!Numpy比Python列表更具优势,其中一个优势便是速度。在对大
- 该代码主要是基于python实现判断指定文件夹下是否存在指定后缀的文件。代码如下:import osYour_Dir='你的文件夹/
- layui数据表格批量删除多条件搜索框:注样式自己写<div class="demoTable" style=&q
- 虽然说IE6除了部分要求苛刻的需求以外已经被可以不考虑了,但是WIN7自带的浏览器IE8还是需要支持的。本文这个方法主要的优点,个人觉得就是
- 基于微信可以做很多有意思的练手项目,看了这张速查表你就会发现,可以做的事情超过你的想象。有一次我想要统计微信群里哪些同学在北京,但发现直接问
- 前言:要说小时候称霸所有翻盖手机的小游戏,除了贪吃蛇,那就是推箱子了。控制小人将所有箱子放到指定位置,就是这样简简单单的操作,陪伴我度过了无
- 最近在学习Python的时候遇到一个知识点,在此记录下来可变参数会自动填充前面的同名默认参数比如下面这个函数def add_student(
- Display SQL Server Login Mode. Supported Plat
- model中compile值可以根据需要更改,满足不同的检测需求#判断一段文本中是否包含简体中文import rezhmodel = re.
- 本文实例为大家分享了js实现select二级联动下拉菜单,供大家参考,具体内容如下<%@ page language="ja
- 本文实例讲述了wxPython使用系统剪切板的方法。分享给大家供大家参考。具体如下:程序运行效果如下图所示:主要代码如下:import wx
- 前言上一篇博客我们知道的Mysql事务的隔离机制和实现,以及锁的详细解析链接: MySQL脏读幻读不可重复读及事务的隔离级别和MVCC、LB
- Python 包含6种数据类型,其中Number(数字)、String(字符串)、Tuple(元组)、List(列表)、Dictionary
- 项目需要把部分代码移植到 Golang , 之前用 Laravel 封装的写起来很舒服,在 Golang 里只能自动动手实现.一开始想的是使
- 在上一篇用JS实现图片轮播效果代码(一)的基础上,增加了左右箭头的响应事件,实现了点击左右箭头也可以让图片滚动:js代码如下:window.
- 在向表中插入数据的时候,经常遇到这样的情况:1、首先判断数据是否存在;2、如果不存在,则插入;3、如果存在,则更新。 在 SQL