Python批量修改单个文件夹文件后缀

今天下载了视频,但是视频格式是.mkv的,唱戏机不支持mkv格式,所以需要将后缀改成.mp4(其他文件格式也可以),由于视频比较多一个一个的更改比较麻烦,所以想到了用python来进行批量修改。

首先说一下流程

1.选定文件夹路径

2.遍历文件夹文件,获取文件全称(名称和格式)

3.将文件名名称与文件格式分开

4.将文件名称与新的格式组合

5.重命名操作

import os
#选定文件夹路径
path = 'D:XXX\\XXX\\' #此处是文件夹的地址

#遍历文件夹文件,获取文件全称(名称和格式)
file = os.listdir(path) #此处是以列表的形式获取文件夹内所有文件
c = 0#为下面标记一个序号
#遍历file这个列表
for i in file:
    #print(i)#得到单独的全称
    #将名称与后缀分开
    find_mkv = os.path.splitext(i)
    #转换成字符串格式,因为下面还有一个c+=1。
    i = str(path)+i
    #如果格式为.mkv
    if find_mkv[1] == '.mkv':
        #新的名字为文件名称+新的格式后缀
        new_name = str(find_mkv[0]) + '.mp4'
        #将上面的选定路径与新的文件名结合
        new_name = path+str(new_name)
        #重命名
        # print(new_name)
        #这个是os模块的重命名函数,i是未转换的完整路径比如D:\\XX\\XX.mkv
        #new_name是重新结合后的完整路径比如D:\\XX\\XX.mp4
        s1 = os.rename(i,new_name)
        #加一个记录个数的前缀
        c+=1
        print(f'{c}  {new_name}已完成')

print('已全部转换完毕')

没写过几次博客,可能有些地方表述不清楚,欢迎指正!!!

#2023.7.6更新,将程序封装了一下,使用os.path.join拼接路径,多添加了一些注释,转换完成后的文件夹与转换之前的文件夹在同一个目录。本程序经过验证。

如果有什么问题,欢迎指正!!!

import os
import shutil

'''运行环境3.11.4'''

class rennames:
    def __init__(self,path):
        '''初始化函数'''
        self.path = path
        self.File_handling()                                                    #执行文件预处理函数

    def File_handling(self):
        '''文件预处理'''
        parent_dir = os.path.dirname(self.path)                                 #获取文件夹的上层路径
        end_mikdir = os.path.dirname(parent_dir)                                #获取parent_dir的路径
        self.end_path = os.path.join(end_mikdir,"转换后\\")                      #在需要转换的文件夹基础上创建转换后文件夹
        if not os.path.exists(self.end_path):                                   #如果文件夹不存在
            os.makedirs(self.end_path)                                          #使用os.makedirs()函数创建文件夹
        else:
            self.ss = os.listdir(self.end_path)                                 #如果文件夹存在,将文件夹里面的内容传递下去

    def former(self):
        '''把文件夹的.mkv内容复制到新文件夹夹'''
        path = self.path                                                        #选定转换内容文件夹路径
        former_file = os.listdir(path)                                          #获取文件名称(名称和格式)
        for i in former_file:                                                   #遍历文件夹
            find_mkv = os.path.splitext(i)                                      #将名称与文件类型分开
            if find_mkv[1] == '.mkv':                                           #如果格式为.mkv
                com_path = os.path.join(path,i)                                 #获取到文件的完整路径
                #print(i+"这里")
                try:                                            
                    self.ss.index(find_mkv[0]+".mp4")                           #查表操作,避免重复的复制文件
                    #print('重复')
                except:
                    shutil.copy2(com_path,self.end_path)                        #只复制后缀为.mkv的文件
        

    def end(self):
        '''转换函数'''       
        end_path = self.end_path                                                #选定转换后内容的文件夹       
        end_file = os.listdir(end_path)                                         #获取文件名称(名称和格式)          
        c = 0                                                                   #创建一个计数器
        for x in end_file:                                                      #遍历转换后的文件
            find_mkv = os.path.splitext(x)
            if not find_mkv[1] == '.mp4':
                s2 = os.path.join(end_path,x)                                   #路径拼接s2是end_path文件夹下的文件绝对路径
                find_mkv = os.path.splitext(x)                                  #转换后的路径与名称
                new_name = os.path.join(end_path, str(find_mkv[0]) + '.mp4')
                s1 = os.rename(s2,new_name)                                     #重命名,参数1需要重命名的完整路径,参数2重命名后的完整路径
                c+=1                                                            #计数器加1
                print(f'{c}  {new_name}已完成')                                  #打印一下转换的进度
  
    def run(self):
        '''运行函数'''
        self.former()
        self.end()
        print('运行结束')

if __name__ == '__main__':
    res = rennames("转换前\\")                                                  #将相对路径传入进去
    res.run()                 

你可能感兴趣的:(python)