前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python递归重命名文件和文件夹

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

原创
作者头像
华科云商小徐
发布2024-05-13 10:02:38
1020
发布2024-05-13 10:02:38
举报
文章被收录于专栏:小徐学爬虫小徐学爬虫

使用 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() 进行重命名。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档