(小脚本) (python) 批量修改文件后缀名
有时候我们需要批量修改一些文件的后缀名作为程序员我们自然得自己写点脚本了本文通过python来实现批量修改文件名,同时还能修改其子文件夹中的文件效果展示原目录结构运行展示这里用命令行来展示分别输入四条信息修改效果代码讲解主要函数os.walk(path)这个函数会返回三个内容并且在第二次循环开始是默认递归上次的子目录,因此就能达到遍历该目录下的所有文件的作用如果不想要递归子文件夹的内容,则可以设置
·
前言
有时候我们需要批量修改一些文件的后缀名
作为程序员我们自然得自己写点脚本了
本文通过python来实现批量修改文件名,同时还能修改其子文件夹中的文件
完整代码
import os
class ChangeSuffix():
def __init__(self, absolutePath, beforeSuffix, afterSuffix) -> None:
self.absolutePath = absolutePath
self.beforeSuffix = beforeSuffix
self.afterSuffix = afterSuffix
def work(self, flag=False):
# 需要修改的后缀长度
LEN = len(self.beforeSuffix)
for curDir, subDir, allFile in os.walk(self.absolutePath):
print("当前主目录:", curDir)
print("当前主目录下的所有目录", subDir)
print("当前主目录下的所有文件", allFile)
for curFile in allFile:
curFileSuffix = curFile[-LEN:]
# 判断后缀是否相同,且后缀的前一个是否是.点号
if curFileSuffix == self.beforeSuffix and curFile[-(LEN+1)] == '.':
oldName = os.path.join(curDir, curFile) # 化为绝对路径
newName = oldName[:-LEN] + self.afterSuffix
os.rename(oldName, newName)
# flag 是否递归子文件夹
if not flag:
break
return True
if __name__ == "__main__":
absolutePath = input("请输入目标文件夹的绝对路径:")
beforeSuffix = input("请输入需要修改的后缀:")
afterSuffix = input("请输入修改之后的后缀:")
needRecursion = input("是否需要操作该目录下的子文件夹(0/1): ")
print("************ START ***********")
change = ChangeSuffix(absolutePath, beforeSuffix, afterSuffix)
if change.work(needRecursion != "0"):
print("************ END ***********")
效果展示
原目录结构
C:\Users\windows\Desktop\素材>tree /f
文件夹 PATH 列表
卷序列号为 B87D-2753
C:.
│ 1.jpeg
│ main.exe
│
└─子文件夹
│ 2.jpeg
│ 3.jpeg
│
├─孙子文件夹1
│ 4.jpeg
│
└─孙子文件夹2
5.jpeg
运行展示
这里用命令行来展示
分别输入四条信息
- 目标文件夹的绝对路径
- 需要修改的后缀
- 修改之后的后缀
- 是否需要操作该目录下的子文件夹(0/1)
E:\VS Code\python>python ./test.py
请输入目标文件夹的绝对路径:C:\Users\windows\Desktop\素材
请输入需要修改的后缀:jpeg
请输入修改之后的后缀:png
是否需要操作该目录下的子文件夹(0/1): 1
************ START ***********
当前主目录: C:\Users\windows\Desktop\素材
当前主目录下的所有目录 ['子文件夹']
当前主目录下的所有文件 ['1.jpeg', 'main.exe']
当前主目录: C:\Users\windows\Desktop\素材\子文件夹
当前主目录下的所有目录 ['孙子文件夹1', '孙子文件夹2']
当前主目录下的所有文件 ['2.jpeg', '3.jpeg']
当前主目录: C:\Users\windows\Desktop\素材\子文件夹\孙子文件夹1
当前主目录下的所有目录 []
当前主目录下的所有文件 ['4.jpeg']
当前主目录: C:\Users\windows\Desktop\素材\子文件夹\孙子文件夹2
当前主目录下的所有目录 []
当前主目录下的所有文件 ['5.jpeg']
************ END ***********
修改效果
C:\Users\windows\Desktop\素材>tree /f
文件夹 PATH 列表
卷序列号为 B87D-2753
C:.
│ 1.png
│ main.exe
│
└─子文件夹
│ 2.png
│ 3.png
│
├─孙子文件夹1
│ 4.png
│
└─孙子文件夹2
5.png
代码讲解
主要函数
def work(self, flag=False):
# 需要修改的后缀长度
LEN = len(self.beforeSuffix)
for curDir, subDir, allFile in os.walk(self.absolutePath):
print("当前主目录:", curDir)
print("当前主目录下的所有目录", subDir)
print("当前主目录下的所有文件", allFile)
for curFile in allFile:
curFileSuffix = curFile[-LEN:]
# 判断后缀是否相同,且后缀的前一个是否是.点号
if curFileSuffix == self.beforeSuffix and curFile[-(LEN+1)] == '.':
oldName = os.path.join(curDir, curFile) # 化为绝对路径
newName = oldName[:-LEN] + self.afterSuffix
os.rename(oldName, newName)
# flag 是否递归子文件夹
if not flag:
break
return True
os.walk(path)
这个函数会返回三个内容
- curDir 当前主目录 str
- subDir 当前主目录下的所有目录 list
- allFile 当前主目录下的所有文件 list
并且在第二次循环开始是默认递归上次的子目录,因此就能达到遍历该目录下的所有文件的作用
如果不想要递归子文件夹的内容,则可以设置一个flag来结束循环
for curDir, subDir, allFile in os.walk(self.absolutePath):
pass
判断文件
判断文件的方式比较简单
直接截取该文件名的末尾,判断是否和需要修改的后缀名相等,且前一个字符是点好'.'
修改
# 两个都要绝对路径
os.rename(oldName, newName)
END
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献9条内容
所有评论(0)