去除下载电影和电视剧文件名中的多余字符[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 ...
随机推荐
- 【mysql的编程专题①】流程控制与其他语法
流程控制与内置函数,一般用在select的field字段上,或者用在函数,存储过程,触发器中; 如果用在select上就会随着query出来的row来隐式迭代; 注释与语句结束符 语句结束符 默认有两 ...
- Java学习笔记之:Java引用数据类型之字符串
一.简介 字符串广泛应用在Java编程中,在Java中字符串属于对象,Java提供了String类来创建和操作字符串. 创建字符串最简单的方式如下: String greeting = "H ...
- 门面(Facade)模式(转)
转载:http://www.cnblogs.com/skywang/articles/1375447.html 外部与一个子系统的通信必须通过一个统一的门面(Facade)对象进行,这就是门面模式. ...
- 89. Gray Code
题目: The gray code is a binary numeral system where two successive values differ in only one bit. Giv ...
- Android Intent个人介绍
在Android中要打开一个新的Activity, 不用说,肯定会用到Intent,Intent作为Android的四大组件之一,个人理解,Intent的作用就是用来在(其它三个不同组件)间进行通讯, ...
- Java集合框架学习笔记
集合类的由来:对象用于封装特有数据,对象多了需要存储,如果对象的长度不确定,就使用集合存储. 集合特点1.用于存储对象的容器.2.集合的长度可变.3.集合中不可以存储基本类型 集合容器因为内部的数据结 ...
- zlib代码生成
1.主页下载zlib-1.2.8的source code的压缩包:F:\Develop Tools\zlib-1.2.8 2.下载安装cmake-2.8.1-win32-x86 3.用cmake生成z ...
- UVa 437 (变形的LIS) The Tower of Babylon
题意: 有n种类型的长方体,每种长方体的个数都有无限个.当一个长方体的长和宽分别严格小于另一个长方体的长和宽的时候,才可以把这个放到第二个上面去.输出这n种长方体能组成的最大长度. 分析: 虽说每种都 ...
- UVa 12169 (枚举+扩展欧几里得) Disgruntled Judge
题意: 给出四个数T, a, b, x1,按公式生成序列 xi = (a*xi-1 + b) % 10001 (2 ≤ i ≤ 2T) 给出T和奇数项xi,输出偶数项xi 分析: 最简单的办法就是直接 ...
- 04day1
无穷的数列 找规律 [问题描述] 有一个无穷序列如下: 110100100010000100000- 请你找出这个无穷序列中指定位置上的数字. [输入] 第一行一个正整数 N,表示询问次数:接下来的 ...