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程序设计能有所帮助。

(0)

相关推荐

  • python练习程序批量修改文件名

    复制代码 代码如下: # encoding:utf-8 ### 文件名如:# 下吧.mp3##import os,re fs=os.listdir('xb')for f in fs: ######方法一:partition获取无用字符 #1.将文件名以'['符分为3部分 #ls=f.partition('[') #2.ls[0]为需要文件名,因此获取ls[1:] #dirtystring = ''.join(ls[1:]) #3.开始替换 #newname=f.replace(dirtystri

  • python批量修改文件名的实现代码

    #coding:utf-8 #批量修改文件名 import os import re import datetime re_st = r'(\d+)\+\s?\((\d+)\)' #用于匹配旧的文件名,需含分组 re_match_old_file_name = re.compile(re_st) #要修改的目录 WORKING_PATH = r'F:\Gallery' #---------------------------------------------------------------

  • Python实现批量修改文件名实例

    本文实例讲述了Python实现批量修改文件名的方法.分享给大家供大家参考.具体如下: 下载了评书<贺龙传奇>,文件名中却都含有xxx有声下载,用脚本将其去掉.脚本涉及os.rename重命名方法,str.partition方法使用, 及正则match,search方法区别 # encoding:utf-8 ## # 文件名如: # 贺龙传奇\d+[有声下吧www.ysx8.com].mp3 ## import os,re fs=os.listdir('单田芳_贺龙传奇') for f in f

  • Python遍历目录并批量更换文件名和目录名的方法

    本文实例讲述了Python遍历目录并批量更换文件名和目录名的方法.分享给大家供大家参考,具体如下: #encoding=utf-8 #author: walker #date: 2014-03-07 #summary: 深度遍历指定目录,并将子目录和文件名改为小写 #注意,此程序只针对windows,windows下文件(夹)名不区分大小写 import os import os.path import shutil #读入指定目录并转换为绝对路径 rootdir = raw_input('ro

  • python实现文件名批量替换和内容替换

    指定文件夹,指定文件类型,替换该文件夹下全部文件的内容. 注意在window下的读写内容需要指定编码,还需要在文件头指定#coding:utf-8 编码,避免出现编码问题. 复制代码 代码如下: #coding:utf-8 import osimport os.path path='.'oldStr='.php'newStr='.html' for (dirpath, dirnames, filenames) in os.walk(path):    for file in filenames:

  • Python遍历zip文件输出名称时出现乱码问题的解决方法

    本文实例讲述了Python遍历zip文件输出名称时出现乱码问题的解决方法.分享给大家供大家参考.具体如下: windows中使用python2.7遍历zip文件之后输出文件名等信息,console打印的中文及一些标点出现乱码.查了一下网上说的windows的编码为cp936,print()函数交给系统处理打印,所以要提前编码成windows能够识别的编码. 这种print的乱码也会出现在形如print(mylist)中(mylist是python的list类型变量,print(mylist[2]

  • Python获取文件所在目录和文件名的方法

    实例如下: import os if __name__ == "__main__": file_path = 'D:/test/test.apk' parent_path = os.path.dirname(file_path) print('parent_path = %s' % parent_path) file_name = os.path.split(file_path)[-1] print('file_name = %s' % file_name) 输出: 以上就是小编为大家

  • python根据给定文件返回文件名和扩展名的方法

    本文实例讲述了python根据给定文件返回文件名和扩展名的方法.分享给大家供大家参考.具体分析如下: 这段代码可以根据文件的完整路径返回文件名和扩展名,python的函数可以同时返回两个值,用起来就更方便了 def GetFileNameAndExt(filename): import os (filepath,tempfilename) = os.path.split(filename); (shotname,extension) = os.path.splitext(tempfilename

  • Python实现读取目录所有文件的文件名并保存到txt文件代码

    代码: (使用os.listdir) 复制代码 代码如下: import os def ListFilesToTxt(dir,file,wildcard,recursion):     exts = wildcard.split(" ")     files = os.listdir(dir)     for name in files:         fullname=os.path.join(dir,name)         if(os.path.isdir(fullname)

  • Python实现从URL地址提取文件名的方法

    本文实例讲述了Python实现从URL地址提取文件名的方法.分享给大家供大家参考.具体分析如下: 如:地址为 http://www.jb51.net/images/logo.gif 要想从该地址提取logo.gif,只需要一句代码就可以搞定 import os url = 'http://www.jb51.net/images/logo.gif' filename = os.path.basename(url) print(filename) 输出为: logo.gif 希望本文所述对大家的Py

  • Python编程修改MP3文件名称的方法

    本文实例讲述了Python编程修改MP3文件名称的方法.分享给大家供大家参考,具体如下: 最近刚刚开始学习Python,顺便锻炼思维写的一个小函数,专门用来修改那些网上下载的mp3歌曲后名称不正确时候,使用该函数,使用方法 ModifyMp3FileInfo(r'E:/音乐/12345.mp3') Python代码: #!修改下载的Mp3文件名称为正确的Mp3文件 def ModifyMp3FileInfo(filename): mp3Id3V1 = { "tag":{"va

  • python获取指定目录下所有文件名列表的方法

    本文实例讲述了python获取指定目录下所有文件名列表的方法.分享给大家供大家参考.具体实现方法如下: 这里python代码实现获取文件名列表的功能,可以指定文件中包含的字符,方便提取特定类型的文件名列表: # -*- coding: utf-8 -*- #~ #------------------------------------------------------------------ #~ module:wlab #~ Filename:wgetfilelist.py #~ Funct

  • python实现批量改文件名称的方法

    本文实例讲述了python实现批量改文件名称的方法.分享给大家供大家参考.具体分析如下: 发现python中提供了大量的模块函数,有时候一些系统操作在python中非常简单 下面的文件关键是要放到要操作的目录下, 下面是把当前目录下的图片批量命名,从00开始,其中小于10 的我们在名称前面补零,或者可以利用os设置路径 #-*- coding: UTF-8 -*- import os filenames = os.listdir(os.getcwd()) for name in filename

随机推荐