0x00:前言
有时候,需要对多个文件进行操作,批量修改名字或者修改文件的类型,改变文件扩展名。作为一个学编程的人,用鼠标一个一个的点击,不免太不方便了,也太low了。所以,干脆写个批量对文件名和文件扩展名修改的Python小脚本。
惭愧,正在学习Python,断断续续写了好几个小时。主要是对文件名进行正则匹配时,总是出错。最后不得以先放弃正则,用了字符串的replace方法。如果你有用正则写的,希望指点一下。
0x01:修改前后效果对比
修改前:
修改后:
0x02:源码
# coding:utf-8
# by LandGrey
# Function: Modify the file name or file postfix
import os
Path = r'c:\works\try' #要修改文件所处路径
all_file_list = os.listdir(Path) #列出指定目录下的所有文件
Oldpart = "test" #要替换的文件名中的部分
Newpart = "Land" #新的文件名部分
Oldpostfix =r".txt" #要修改的文件扩展名类型
Newpostfix = r".Grey" #新的文件扩展名类型
#批量修改文件名字
def Modifyprefix(oldcontent,newcontent):
for file_name in all_file_list:
currentdir =os.path.join(Path, file_name) #连接指定的路径和文件名or文件夹名字
if os.path.isdir(currentdir): #如果当前路径是文件夹,则跳过
continue
fname = os.path.splitext(file_name)[0] #分解出当前的文件路径名字
ftype = os.path.splitext(file_name)[1] #分解出当前的文件扩展名
replname =fname.replace(oldcontent,newcontent)
newname = os.path.join(Path,replname+ftype) #文件路径与新的文件名字+原来的扩展名
os.rename(currentdir,newname) #重命名
print "Modify file name........"
#批量修改文件扩展名
def Modifypostfix(oldftype,newftype):
for file_name in all_file_list:
currentdir =os.path.join(Path,file_name)
if os.path.isdir(currentdir): #跳过文件夹
continue
fname = os.path.splitext(file_name)[0]
ftype = os.path.splitext(file_name)[1]
if ftype ==oldftype: #找到需要修改的扩展名
newname = os.path.join(Path,fname+newftype) #文件路径与原来的文件名字+新的扩展名
os.rename(currentdir,newname) #重命名
print "Modify file postfix...... "
Modifyprefix(Oldpart,Newpart)
Modifypostfix(Oldpostfix,Newpostfix)
print "finished !"
0x03:说明
详细的解说见注释。
由于博客改变了文本原缩进格式,虽我也尽力预览博文修改了,但还是请注意源码中的缩进。
共有两个不同的函数对应两个不同的功能,用到哪个最后就调用哪个,不用的那个函数就用“#”注释掉好了。