使用 Python 递归重命名文件和文件夹可以通过 os
模块和 os.path
模块来完成。下面是一个示例代码,演示如何递归地重命名文件和文件夹:
1、问题背景
在研究大型数字档案时,需要将这些档案复制到本地存储进行保存。这些档案通常存储在 USB 驱动器或 U 盘上,大小在 4GB 到 250GB 之间。在复制过程中,由于目录和文件嵌套较深,并且文件或目录的名称很长(有时超过 Windows 允许的 255 个字符),这带来了很多问题。
2、解决方案
为了解决这个问题,需要编写一个 Python 脚本,递归地从文件夹和文件名称中删除所有空格,并将名称缩短到 255 个字符以下。同时,为了保留旧名称,新的名称将使用驼峰命名法。
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))
改进版本:
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()
进行重命名。
最后需要提醒大家的是。请确保在使用此代码之前备份重要的文件,以防止意外情况。