去除下载电影和电视剧文件名中的多余字符[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实现]的更多相关文章
- 解决osg路径与文件名中的中文字符问题
转至:http://blog.csdn.net/zhuqinglu/article/details/2064013 在打开或者保存一个osg模型的时候,经常遇到中文路径或者中文文件名的问题,此时会提示 ...
- 过滤Windows文件名中的非法字符
转载:http://blog.csdn.net/infoworld/article/details/42033097 场景: 1. 通常生成文件时需要一个文件名,而生成文件名的方式可能是通过用户输入的 ...
- 文件名中含有连续字符abc,相应文件中也含有字符串abc
find ./ -name '*abc*' -exec grep 'abc' {} -H \; find ./ -name '*abc*' | xargs -I '{}' grep abc {} -H ...
- Linux查看当前目录下文件名中包含指定字符的文件
find . -type f -name "edaijia* 结果:
- ajax成功返回数据中存在多余字符的处理
ajax里有需要判断反馈的字符串是否为“ok”,在浏览器里调试,看到返回的内容明明是“ok”,但是if(“ok”==data)判断为false,用alert打印内容也是ok,但是打印长度的时候却是3. ...
- 使用response.setHeader("Content-Disposition","attachment;filename="+fName)下载文件,中文文件名无法显示的问题
今天遇到这么一个情况,在Action代码中进行文件下载: ActionForm得到file_id,通过file_id进行数据库查询得到file_name以及服务器硬盘上的file_uri,其中file ...
- response.setHeader("Content-disposition","attachment;filename="+fileName) 下载时文件名中存在空格错误
最近在进行文件下载时发现一个问题,就是下面语句运行时,下载某些文件正常,下载某些文件异常,后来发现文件名中有空格的文件火狐浏览器是默认将文件名截断了的 response.setHeader(" ...
- 【.net】在ASP.NET中,IE与Firefox下载文件名中带中文汉字的文件,文件名乱码的问题
#问题:客户端为ie或Firefox,服务端为asp.net时,下载文件名中包含中文汉字时,下载下来的文件的文件名是乱码: #解决方案: 示例代码:下载名称中带汉字的文件: public void P ...
- 火狐浏览器下载文件中文乱码,文件名中的空格变加号("+")的问题
解决一下问题: 1.火狐浏览器下载文件,中文变乱码 2.IE浏览器下载文件,丢失文件扩展名或强制扩展名为".txt" 3.浏览器下载文件,文件名中的空格变成加号("+&q ...
随机推荐
- Windows下Subversion和Apache的安装及配置(一)
1.序 Subversion可谓版本控制软件中的佼佼者,其开源性,易用性已受到众多软件开发者首选的版本控制软件.在这里我想记录我安装Subversion和Apache的过程.注意,Subversion ...
- JAX-RS 方式的 RESTful Web Service 开发
JAX-RS 方式的 RESTful Web Service 开发 ——基于 CXF+Spring 的实现 Web Service 目前在风格上有两大类,一个是基于 SOAP 协议,一个是完全遵循 H ...
- Android Service和广播
前言: 我们都知道Android的四大基本组件:Activity.ContentProvider.Service以及BroadcastReceiver,前面的两个我们在前几篇已经具体讲解了,今天这一天 ...
- maven项目配置Jetty服务器
<plugin> <groupId>org.mortbay.jetty</groupId> <artifactId>jetty-maven-plugin ...
- css3 去掉点击高光(移动端)
在我们用手机浏览网页时,当点击某个链接或者点击事件时 会出现一层蓝色半透明的高光显示, 但在开发webapp时,由于网页是被native load去的,在app里面点击的时候如果出现高光则显得很不和谐 ...
- HDU 3949 XOR(高斯消元)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题意:给出一个长度为n的数列A.选出A的所有子集(除空集外)进行抑或得到2^n-1个数字,去重排 ...
- sh.exe": grunt: command not found
今天在git命令行工具中使用 grunt的时候,总是提示我找不到grunt命令,如: sh.exe": grunt: command not found 但是我运行 npm install ...
- 使用stringstream时的清空操作
在C++中可以使用stringstream来很方便的进行类型转换,字符串串接,不过注意重复使用同一个stringstream对象时要先继续清空,而清空很容易想到是clear方法,而在stringstr ...
- bzoj1863: [Zjoi2006]trouble 皇帝的烦恼
白书原题.l边界又设错啦.一般都是错这里吧.注意为什么这里不能是l=0.(只是为了判断第一个和最后一个 #include<cstdio> #include<cstring> # ...
- Selenium Tutorial (2) - Selenium IDE In Depth
Installing Firefox and Firebug Installing and Opening Selenium IDE Starting with test cases and test ...