使用 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()
进行重命名。
最后需要提醒大家的是。请确保在使用此代码之前备份重要的文件,以防止意外情况。