7.1 基本操作
你已经学会了如何处理文件,现在让我们来处理目录。有时候这跟处理文件很像,但有时候又不是。目录有其特定的特性。处理目录的主要功能由 模块 os
和 shutil
提供。
目录的基本操作:
创建目录
创建新目录使用 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()}")
GO TO FULL VERSION