去除下载电影和电视剧文件名中的多余字符[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 ...
随机推荐
- [SharePoint 2013 入门教程 2 ] 创建WEB应用程序,网站集,网站
SharePoint 2013 的 Hello World 由大到小 创建WEB应用程序(老母),网站集(儿子),网站(孙子) 直接确定,其余都默认 填入标题,选好模板.网站集 儿子就有了. 点击页 ...
- posix 线程(一):线程模型、pthread 系列函数 和 简单多线程服务器端程序
posix 线程(一):线程模型.pthread 系列函数 和 简单多线程服务器端程序 一.线程有3种模型,分别是N:1用户线程模型,1:1核心线程模型和N:M混合线程模型,posix thread属 ...
- 2014--9=17 软工二班 MyEclipse blue==修改浏览器语言
- ADO.NET入门教程(三) 连接字符串,你小觑了吗?
出处:http://www.cnblogs.com/liuhaorain/archive/2012/02/12/2347914.html 摘要 ADO.NET强大的优势在于对不同的数据源提供一致的访问 ...
- JSON操作技巧
JSONObject.JSONArray 最近两个星期接触最多的就是json和map了. 之前用到的json,就是一个键对应一个值,超级简单的一对一关系.现在用到的json那可以层层嵌套啊,刚开始接触 ...
- sqort函数用法总结
qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序.排序之后的结果仍然放在原数组中.使用qsort函数必须自己写一个比较函数. 函数原 ...
- C/C++面试题(一)
1.手写快速排序 void quick_sort(int s[], int l, int r) { if (l < r) { //Swap(s[l], s[(l + r) / 2]); //将中 ...
- Unrecognized selector sent to instance xxxxxxx
两个界面传递参数时报这个错误,经检查发现,是因为目标视图没有关联对应的controller.
- Android上常见度量单位【xdpi、hdpi、mdpi、ldpi】解读
术语和概念 屏幕尺寸 屏幕的物理尺寸,以屏幕的对角线长度作为依据(比如 2.8寸, 3.5寸). 简而言之, Android把所有的屏幕尺寸简化为三大类:大,正常,和小. 程序可以针对这三种尺 ...
- [Codeforces677C]Vanya and Label(组合数学,快速幂)
题目链接:http://codeforces.com/contest/677/problem/C 题意:给一个字符和数字的映射关系,然后再给一个字符串.问有多少个其他的字符串,使得那些字符串之间相互操 ...