Python os.renames() 方法
在 Python 标准实用程序模块下,我们有 os 模块来与操作系统交互。
本文讨论用于重命名递归目录或文件的 os.renames() 方法。 此方法在行为上与 os.rename() 方法非常相似,后者的作用相同,只是它还创建了中间目录,这些目录需要生成完整路径名。
这个过程首先由更改文件名之前的方法完成。 此 os.renames() 方法不仅更改原始文件的名称,而且使用 os.removedirs() 方法删除以前的(原始)文件。
Python os.renames()
方法的语法
os.renames(new, old)
参数
- old 它接受一个类似路径的对象,并显示要重命名的文件或目录的原始名称
- new 它接受一个类似路径的对象并指示文件或目录的新名称。 该参数还可以包括当前系统文件中不存在的目录
返回值
此方法不返回任何内容。 相反,它会更改文件或目录的名称。
示例代码:使用 os.renames() 方法
为了演示 os.renames()
方法的概念,下面的源代码显示了 source_path 目录中的所有文件。
# importing os module to interact with os methods
import os
# source path to find the file
source_path = 'C:/Users/lenovo/Downloads'
# change the directory
os.chdir(source_path)
print("Old file or directory name: ", os.listdir(os.getcwd()))
# to rename a file
os.renames('dictionary.txt', 'new_name.txt')
# show newly renamed file
print("Renamed file and directory: ", os.listdir(os.getcwd()))
# to rename a directory
os.renames(source_path + "/remove", source_path + "/create")
print("Folder is successfully renamed")
输出:
Old file or directory name: ['image.jpg', 'slides.pptx', 'dictionary.txt', 'MyApplication.zip']
Renamed file and directory: ['image.jpg', 'slides.pptx', 'new_name.txt', 'MyApplication.zip']
Folder is successfully renamed
示例代码:os.renames() 方法中的 FileNotFoundException
在 os.renames() 方法中,如果旧参数不是有效文件或目录。 然后,os.renames() 在控制台中返回异常 FileNotFoundException。
import os
source_path = 'C:/Users/lenovo/Downloads/'
# if the file or directory does not exist
os.renames(source_path +'dictionary.txt', 'new_name.txt')
print("Renamed file or directory: ", os.listdir(os.getcwd()))
输出:
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'C:/Users/lenovo/Downloads/dictionary.txt' -> 'new_name.txt'
示例代码:使用 os.renames() 方法重命名指定文件并移动到新目录
如果要重命名文件并将其移动到新目录,您仍然可以使用 os.renames()
方法。 os.renames()
方法中的新参数可以仅采用文件名或目录和文件名。
如果新目录无效或不存在,该方法将创建一个具有指定名称的新目录,不会出现任何错误异常。
import os
source_path = 'C:/Users/lenovo/Downloads/'
os.chdir(source_path)
print("Old file or directory name: ", os.listdir(os.getcwd()))
# rename the file and move to a new directory
os.renames('dictionary.txt', 'remove/new_name.txt')
print("File is renamed, and directory is created successfully.")
输出:
File is renamed, and directory is created successfully.
示例代码:使用 os.renames() 方法时出现 FileExistsError 异常
正如我们所讨论的,os.renames() 方法使用两个参数,后者用于重命名指定的文件。 当已存在与提供的重命名文件同名的文件时,将发生异常 FileExistsError。
该方法返回异常但不覆盖同一文件。 下面的示例显示了此类异常是如何发生的以及如何处理它。
import os
source_path = 'C:/Users/lenovo/Downloads/'
os.chdir(source_path)
# if new_name.txt already exist in specified source_path
os.renames('dictionary.txt', 'new_name.txt')
print(os.listdir(os.getcwd()))
print("File renamed successfully.")
输出:
FileExistsError: [WinError 183] Cannot create a file when that file already exists: 'dictionary.txt' -> 'new_name.txt'
为了解决这种情况,我们可以:
- 用相同的名称重命名现有文件(通过 rename() 方法)。
- 如果文件已经存在,则将其删除(通过 remove() 方法)。
- 使用异常处理更改文件的目录。
示例代码:os.renames() 与 shutil.move() 方法
当源路径和目标路径位于不同的系统驱动器上时,os 模块可能会失败。 os.renames()
方法返回 OSError 异常,表明系统无法移动文件,而 shutil.move()
方法检查源路径和目标路径是否在不同的驱动器上。
如果目标路径不同,该方法确保将文件复制到另一个驱动器并将其从原始位置删除。 因此,证明 os.renames()
方法适用于低级函数,而 shutil.move()
方法适用于更高级别的函数。
import os
# import for using move() method
import shutil
# check the difference here
shutil.move("C:/Users/lenovo/Downloads/dictionary.txt", "E:/")
print("shutil.move method works successfully")
os.rename("C:/Users/lenovo/Downloads/dictionary1.txt", "E:/")
print("os.rename method works successfully")
输出:
# program works fine for shutil.move() method
shutil.move method works successfully
# program throws exception on os.renames() method
OSError: [WinError 17] The system cannot move the file to a different disk drive: 'C:/Users/lenovo/Downloads/dictionary1.txt' -> 'E:/'
无效的跨设备链接异常错误
有时,当使用 os.renames()
方法并以不同方式定义源路径和目标路径时,用户可能会面临不同的异常,例如,无效的跨设备链接。
要解决此异常,我们需要使用上面建议的 shutil 模块内部的 move()
方法。 当我们想在不同的系统驱动器中工作时,不鼓励使用 os 模块。
相关文章
Django 中的 Slug
发布时间:2023/05/04 浏览次数:173 分类:Python
-
本篇文章旨在定义一个 slug 以及我们如何使用 slug 字段在 Python 中使用 Django 获得独特的帖子。
在 Django 中按降序过滤查询集中的项目
发布时间:2023/05/04 浏览次数:157 分类:Python
-
在这个讲解中,学习如何借助 Django 中的 order_by() 方法按降序过滤出查询集中的项目。
Django ALLOWED_HOSTS 介绍
发布时间:2023/05/04 浏览次数:181 分类:Python
-
本文展示了如何创建您的 Django 网站,为公开发布做好准备,如何设置 ALLOWED_HOSTS 以及如何在使用 Django 进行 Web 部署期间修复预期的主要问题。
Django 中的 Select_related 方法
发布时间:2023/05/04 浏览次数:129 分类:Python
-
本文介绍了什么是查询集,如何处理这些查询以及我们如何利用 select_related() 方法来过滤 Django 中相关模型的查询。
使用 Post 请求将数据发送到 Django 服务器
发布时间:2023/05/04 浏览次数:159 分类:Python
-
在这篇关于Django的讲解中,我们简要介绍了post和get请求以及如何在Django中用post实现CSRF token。
Django 返回 JSON
发布时间:2023/05/04 浏览次数:106 分类:Python
-
在与我们的讨论中,我们简要介绍了 JSON 格式,并讨论了如何借助 Django 中的 JsonResponse 类将数据返回为 JSON 格式。
在 Django 中创建对象
发布时间:2023/05/04 浏览次数:59 分类:Python
-
本文的目的是解释什么是模型以及如何使用 create() 方法创建对象,并了解如何在 Django 中使用 save() 方法。
在 Django 中为多项选择创建字段
发布时间:2023/05/04 浏览次数:75 分类:Python
-
在本文中,我们将着眼于为多项选择创建一个字段,并向您展示如何允许用户在 Django 中进行多项选择。