去除下载电影和电视剧文件名中的多余字符[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 ...
随机推荐
- [Python]读写文件方法
http://www.cnblogs.com/lovebread/archive/2009/12/24/1631108.html [Python]读写文件方法 http://www.cnblogs.c ...
- React Jest测试
一. var jest = require('jest'); jest.dontMock('../CheckboxWithLabel.js'); describe('CheckboxWithLabel ...
- Entity Framework: Get mapped table name from an entity
The extension methods I have created one extension method for DbContext and other for ObjectContext: ...
- PHP获取服务器的mac地址类
PHP获取服务器的mac地址类,不是客户端的. <?php class GetMacAddr{ var $return_array = array(); // 返回带有MAC地址的字串数组 va ...
- Shell最多支持多少个参数
本文转自:http://www.jb51.net/article/56548.htm 这篇文章主要介绍了Shell最多支持多少个参数?本文是对Shell最多可以输入多少个参数的一篇测试文章,需要的 ...
- 在java程序中访问windows有用户名和密码保护的共享目录
在java程序中访问windows有用户名和密码保护的共享目录 Posted on 2015-11-20 14:03 云自无心水自闲 阅读(3744) 评论(0) 编辑 收藏 --> Jav ...
- cocos2dx开发笔记
1.帧动画:SpriteTest=>SpriteAnimationSplit 2.sourceinsight显示代码行 option->document option->editin ...
- onlineDDL测试
onlineDDL语法: alter table ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} ADD [COLUMN] c ...
- 设置UITableView section间距
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { return 0 ...
- Android Activity形象描述
Activity就是形象的说就是一个容器,在里面放置各种控件(按钮,文本,复选框等),就形成了软件的界面~ Activity是可见的,如果不加任何控件的话,那么就像Windows中的空白窗体一样 通过 ...