使用Python递归重命名文件和文件夹

2024-05-13 10:02:38 浏览数 (3)

使用 Python 递归重命名文件和文件夹可以通过 os 模块和 os.path 模块来完成。下面是一个示例代码,演示如何递归地重命名文件和文件夹:

1、问题背景

在研究大型数字档案时,需要将这些档案复制到本地存储进行保存。这些档案通常存储在 USB 驱动器或 U 盘上,大小在 4GB 到 250GB 之间。在复制过程中,由于目录和文件嵌套较深,并且文件或目录的名称很长(有时超过 Windows 允许的 255 个字符),这带来了很多问题。

2、解决方案

为了解决这个问题,需要编写一个 Python 脚本,递归地从文件夹和文件名称中删除所有空格,并将名称缩短到 255 个字符以下。同时,为了保留旧名称,新的名称将使用驼峰命名法。

代码语言:javascript复制
import os
​
# 获取当前工作目录
current_path = os.getcwd()
print(current_path)
​
# 指定要重命名的目录
path = "k:/test3/"
​
# 进入指定目录
os.chdir(path)
​
# 获取当前工作目录
current_path = os.getcwd()
print(current_path)
​
# 创建一个新文件名的变量
new_filename= ""
​
# 获取目录中的所有文件和文件夹名称
filenames = os.listdir(path)
print(filenames)
​
# 遍历文件名列表
for filename in filenames:
    print("nOldname: n"   filename)
​
    # 将文件名转换为小写并去除两端的空格
    new_filename = filename.lower().strip()
​
    # 如果文件名中包含空格
    if " " in filename:
        # 将文件名拆分成单词列表
        fn_parts = [w.capitalize() for w in filename.split()]
​
        # 将单词列表连接成新的文件名
        new_filename = ""
        new_filename = new_filename.join(fn_parts)
​
        # 打印新的文件名
        print("New filename: n"   new_filename   "n")
​
        # 重命名文件
        os.rename(os.path.join(path, filename), os.path.join(path, new_filename))
​
    # 如果文件名不包含空格
    else:
        # 将文件名转换为首字母大写
        new_filename = new_filename.title()
​
        # 打印新的文件名
        print("New filename: n"   new_filename   "n")
​
        # 重命名文件
        os.rename(os.path.join(path, filename), os.path.join(path, new_filename))

改进版本:

代码语言:javascript复制
import os
​
# 获取当前工作目录
current_path = os.getcwd()
print(current_path)
​
# 指定要重命名的目录
path = "k:/test3/"
​
# 递归遍历目录
for dir, subdir, files in os.walk(path):
    # 遍历文件列表
    for filename in files:
        # 获取文件的绝对路径
        file_path = os.path.join(dir, filename)
​
        # 将文件名转换为小写并去除两端的空格
        new_filename = filename.lower().strip()
​
        # 如果文件名中包含空格
        if " " in filename:
            # 将文件名拆分成单词列表
            fn_parts = [w.capitalize() for w in filename.split()]
​
            # 将单词列表连接成新的文件名
            new_filename = ""
            new_filename = new_filename.join(fn_parts)
​
        # 如果文件名不包含空格
        else:
            # 将文件名转换为首字母大写
            new_filename = new_filename.title()
​
        # 获取新的文件绝对路径
        new_file_path = os.path.join(dir, new_filename)
​
        # 重命名文件
        os.rename(file_path, new_file_path)
​
# 返回到当前工作目录
os.chdir(current_path)

在代码中,使用了 os.walk() 函数递归遍历指定的目录,并将目录中的所有文件进行重命名。

函数使用 os.walk() 遍历根目录以及其子目录中的所有文件和文件夹。对于每个文件夹,使用 os.rename() 将旧名称替换为新名称。对于每个文件,同样使用 os.rename() 进行重命名。

最后需要提醒大家的是。请确保在使用此代码之前备份重要的文件,以防止意外情况。

0 人点赞