处理目录

Python SELF ZH
第 21 级 , 课程 6
可用

7.1 基本操作

你已经学会了如何处理文件,现在让我们来处理目录。有时候这跟处理文件很像,但有时候又不是。目录有其特定的特性。处理目录的主要功能由 模块 osshutil 提供。

目录的基本操作:

创建目录

创建新目录使用 os.mkdir() 函数。

例子:


import os

# 创建新目录
os.mkdir('new_directory')
print("目录 'new_directory' 已创建")

创建多个嵌套目录

创建多个嵌套目录使用 os.makedirs() 函数。

例子:


import os

# 创建多个嵌套目录
os.makedirs('parent_directory/child_directory')
print("嵌套目录 'parent_directory/child_directory' 已创建")

删除目录

删除空目录使用 os.rmdir() 函数。删除包含内容的目录使用 shutil.rmtree() 函数。

例子:


import os

# 删除空目录
os.rmdir('new_directory')
print("目录 'new_directory' 已删除")

删除包含内容的目录示例:


import shutil

# 删除包含内容的目录
shutil.rmtree('parent_directory')
print("目录 'parent_directory' 及其所有内容已删除")

重要! 永远不要删除包含所有内容的目录。在 10 次中有 1 次你的程序会出现 bug,你会误删掉一大半磁盘上的文件。每个人都会经历这个问题。千万不要这样做。

建议在删除目录前使用 os.path.exists() 函数检查目录是否存在。这可以防止删除不存在的目录或路径错误引起的错误。

例子:


import os
import shutil

# 删除前检查目录是否存在
directory_path = 'parent_directory'
if os.path.exists(directory_path):
    shutil.rmtree(directory_path)
    print(f"目录 '{directory_path}' 及其所有内容已删除")
else:
    print(f"目录 '{directory_path}' 不存在,无法删除")

7.2 复制目录

移动和重命名目录

移动或重命名目录使用 os.rename() 函数。


import os

# 创建示例目录
os.mkdir('original_directory')

# 重命名目录
os.rename('original_directory', 'renamed_directory')
print("目录 'original_directory' 已重命名为 'renamed_directory'") 

复制目录

复制目录使用 shutil.copytree() 函数。此函数不仅复制目录的内容,还会在指定的目标路径创建新目录。


import os
import shutil

# 创建示例目录
os.mkdir('source_directory')

# 复制目录
shutil.copytree('source_directory', 'destination_directory')
print("目录 'source_directory' 已复制到 'destination_directory'")

7.3 当前目录

每个运行的程序都有一个称为“当前工作目录”的概念。通常,这是程序运行的目录,也是它查找其辅助文件的目录。例如,所有路径中没有目录名的文件将被搜索在当前目录中。

获取当前工作目录

获取当前工作目录使用 os.getcwd() 函数。


import os

# 获取当前工作目录
current_directory = os.getcwd()
print(f"当前工作目录: {current_directory}")

更改当前工作目录

更改当前工作目录使用 os.chdir() 函数。


import os

# 更改当前工作目录
os.chdir('new_directory')
print(f"当前工作目录已更改为: {os.getcwd()}")

更改当前工作目录可能会影响相对于当前目录指定的文件路径。在更改目录时请小心,因为这可能导致错误,如果程序期望在原始目录中找到文件。

检查目录是否存在

检查目录是否存在使用 os.path.exists() 函数。


import os

# 检查目录是否存在
directory_path = 'new_directory'
if os.path.exists(directory_path):
    print(f"目录 '{directory_path}' 存在")
else:
    print(f"目录 '{directory_path}' 不存在")

获取目录的绝对路径

获取绝对路径使用 os.path.abspath() 函数。


import os

# 获取目录的绝对路径
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"绝对路径: {absolute_path}")

7.4 目录内容

获取文件和目录列表

获取指定目录中的文件和目录列表使用 os.listdir() 函数。


import os

# 获取当前目录中的文件和目录列表
contents = os.listdir('.')
print(f"当前目录内容: {contents}")

可以将文件和目录作为更复杂的对象来处理,而不是仅作为路径列表。

使用 os.scandir() 获取目录内容信息

os.scandir() 函数返回一个迭代器,为目录中的每个条目提供 DirEntry 对象。这些对象包含有关文件和目录的信息,使其使用与 os.listdir() 相比更为高效,特别是对于大型目录。


import os

# 获取目录内容信息
with os.scandir('.') as entries:
    for entry in entries:
        print(f"名称: {entry.name}, 是目录: {entry.is_dir()}, 是文件: {entry.is_file()}")
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION