pathlib 是 Python 标準库中的一个模组,提供了一个面向对象的方式来处理文件系统路径。这个模组自 Python 3.4 开始引入,旨在简化文件和目录的操作,使其更加直观和易于使用。以下是 pathlib 模组的主要特点和功能介绍。

主要特点

跨平台支持: pathlib 可以自动根据操作系统选择适当的路径表示方式,例如在 Windows 上使用 WindowsPath,在 Unix/Linux 系统上使用 PosixPath。这意味着你不需要担心不同操作系统之间的路径分隔符问题。面向对象: pathlib 将路径表示为对象,这使得路径操作更具可读性和可维护性。你可以直接调用方法来进行各种操作,而不必使用函数式的 os.path 方法。简化的语法: 使用 / 运算符来合併路径,使得代码更简洁。例如,Path(\'/home\') / \'user\' 会生成 /home/user 的路径。

创建 Path 对象

from pathlib import Path
# 创建当前工作目录的 Path 对象
current_path = Path(\'.\')
#或是可以使用current_path = Path(\'\')
print(current_path.resolve()) # 输出当前工作目录的绝对路径

(\'.\')(点): 在文件系统中,. 是一个特殊的符号,表示当前目录。这意味着如果你在某个目录下运行 Python 程式,使用 Path(\'.\') 创建的 Path 对象将指向该目录。

在使用 Python 的 pathlib 模组时,Path(\'.\') 和Path(\'\')都可以用来表示当前工作目录,但它们在某些情况下的行为和意图有所不同。Path(\'.\') 与 Path(\'\') 的区别Path(\'.\'):这表示当前工作目录,通常用于明确指示你正在处于当前目录下进行操作。使用 \'.\' 是一种常见的做法,表示“这里”或“当前位置”。

Path(\'\'):这通常表示一个空路径,在某些上下文中,它可能会被解释为根目录或不明确的路径。在大多数操作中,使用 Path(\'\') 可能会导致不明确的行为,特别是在需要明确指定当前目录的情况下。

使用建议

使用 Path(\'.\'): 如果你的意图是明确地指向当前工作目录,建议使用 Path(\'.\')。这样可以提高代码的可读性,让其他开发者更容易理解你的意图。使用 Path(\'\'): 虽然在某些情况下可以使用,但通常不推荐这样做,因为它可能会导致混淆或不一致的行为。

检查路径属性

path = Path(\'/tmp/myfile.txt\')

# 检查文件是否存在
print(path.exists()) # 输出: True 或 False

# 检查是否为文件
print(path.is_file()) # 输出: True 或 False

# 检查是否为目录
print(path.is_dir()) # 输出: True 或 False

读取和写入文件

# 写入文本到文件
path.write_text(\'Hello, World!\')

# 读取文件内容
content = path.read_text()
print(content) # 输出: Hello, World!

遍历目录

# 列出目录中的所有文件和子目录
for item in Path(\'/tmp\').iterdir():
print(item)

路径操作

# 合併路径
new_path = Path(\'/home\') / \'user\' / \'documents\'
print(new_path) # 输出: /home/user/documents

# 获取文件名和扩展名
print(new_path.name) # 获取文件名
print(new_path.suffix) # 获取扩展名

动手练习1

from pathlib import Path
import json
current_path = Path(\'.\')
digit_mapping ={ 1:\'a\', 2:\'b\', 3:\'c\', 4:\'d\', 5:\'e\'}
Path(current_path/\'digit_mapping.json\').write_text(json.dumps(digit_mapping))

代码解析1.current_path:这是一个 Path 对象,代表当前工作目录。通常是使用 Path(\'.\') 或其他方式创建的。

2.current_path/\'digit_mapping.json\':- 这部分使用了 / 运算符来合併路径。这是 pathlib 模组的一个特性,它允许你以更直观的方式构建文件路径。- 最终结果是一个新的 Path 对象,指向当前工作目录下的 digit_mapping.json 文件。

3.json.dumps(digit_mapping):- json.dumps() 是将 Python 对象(如字典、列表等)转换为 JSON 格式字符串的方法。- 在这里,digit_mapping 可能是一个字典或其他可序列化的 Python 对象。这行代码将其转换为 JSON 字符串。

4.Path(...).write_text(...):- write_text() 是 pathlib.Path 对象的一个方法,用于将文本写入指定的文件。如果该文件digit_mapping.json不存在,则会自动创建它,然后将 digit_mapping字典写入。- 在这里,它将前面生成的 JSON 字符串写入到 digit_mapping.json 文件中。

动手练习2

在当前目录下生成一个资料夹

from pathlib import Path
import json
current_path = Path(\'.\')
digit_mapping ={ 1:\'a\', 2:\'b\', 3:\'c\', 4:\'d\', 5:\'e\'}
Path(current_path/\'digit_mapping.json\').write_text(json.dumps(digit_mapping))

out_dir = Path(current_path /\'out\')
out_dir.mkdir(exist_ok = True)
Path(out_dir/\'digit_mapping.json\').write_text(json.dumps(digit_mapping))

代码解析1.current_path/\'out\':- 这行代码的作用是创建一个新的 Path 对象out 子目录,并指向当前工作目录下的 out 子目录。- current_path 是一个 Path 对象,代表当前工作目录。

2.out_dir = Path(current_path/\'out\'):- 这行代码将合併后的路径赋值给变量 out_dir,使其成为一个指向当前工作目录下的 out 目录的 Path 对象。

3.out_dir.mkdir(exist_ok=True):- mkdir()方法用于创建目录。如果指定的目录已经存在,且exist_ok=True,则不会引发错误。如果目录不存在,则会创建它。- 在这里,因为设置了exist_ok=True,即使 out_dir已经存在,也不会引发FileExistsError。4.Path(out_dir/\'digit_mapping.json\'):- 使用 / 运算符将 out_dir 路径与文件名 \'digit_mapping.json\' 合併,生成一个新的 Path 对象,指向该子目录中的 JSON 文件。5.write_text(json.dumps(digit_mapping)):- json.dumps(digit_mapping) 将 Python 对象(在此例中是名为 digit_mapping 的变量)转换为 JSON 格式的字符串。- 然后,使用 write_text() 方法将该 JSON 字符串写入到指定的文件(即 digit_mapping.json)。如果该文件不存在,则会自动创建它。

总结

pathlib 模组提供了一种更现代化、更灵活的方式来处理文件系统路径,适合用于各种文件和目录操作。它的面向对象设计使得代码更具可读性,并且能够轻鬆地处理不同操作系统之间的差异。如果你有更多问题或需要进一步了解 pathlib 的功能,随时告诉我!