批量更改文件夹下所有文件名或者后缀名的脚本

864 阅读1分钟

整理项目代码的时候因为需要将.py后缀名的转变为.pyx的,秉承着不重复造轮子的理论,在网上搜刮了一波,并不是没有发掘的可用的代码,而是写着不是那么清晰,所以我稍微重构了一下代码,顺便把一些常用且有可能用到功能也加上了。
以下代码可以:

  • 输出文件夹目录结构,将里面所有文件路径存入一个列表内
  • 批量更改想需更改的文件后缀名
  • 批量重名文件
import os
import os.path


class walk_dir:
    def __init__(self):
        self.files = None

    def show(self, path, deepth=0):
        """
        获取文件夹目录结构,并找出其中所有的文件组成列表
        @param path:文件夹路径
        @param deepth: 深度,默认参数即可,不用设置
        @return:
        """
        self.files = list()
        if deepth == 0:
            print("root:" + path + "")

        for item in os.listdir(path):

            print("  " * deepth + "+--" + item)

            new_item = path + '\\' + item
            if os.path.isdir(new_item):
                self.show(new_item, deepth + 1)
            else:
                self.files.append(new_item)

        return self.files

    def change_name(self, path, new_name):
        """
        批量更改文件夹下的文件名,文件名自动递加,如lin0,lin1,lin2...
        @param path: 文件夹路径
        @param new_name: 新的文件名(lin)
        @return:
        """
        self.show(path)
        for file in self.files:
            os.rename(file,
                      "\\".join(os.path.splitext(file)[0].split("\\")[:-1]) + "\\" + new_name + str(
                          self.files.index(file)) + os.path.splitext(file)[1])

    def change_type(self, path, old_suffix, new_suffix):
        """
        批量更改文件夹下的文件后缀名
        @param path: 文件夹路径
        @param old_suffix: 需要更改的文件后缀名(".py")
        @param new_suffix: 新的文件后缀名(".pyx")
        @return:
        """
        self.show(path)
        for file in self.files:
            file_type = os.path.splitext(file)[1]  # 文件类型
            if file_type == old_suffix:
                os.rename(file, os.path.splitext(file)[0] + new_suffix)


if __name__ == '__main__':
    walk_dir = walk_dir()
    walk_dir.change_name(r'C:\Users\Administrator\Desktop\test', 'lin')