每天学习一点Python——掌握pathlib模块
一、文件系统基础概念
文件本质
文件是存储在物理设备上的字节序列,每个字节代表0-255的整数。
文件系统核心功能
跨平台路径表示差异
# Windows系统路径表示windows_path = r"C:\Users\David\Documents\hello.txt"
# macOS/Linux系统路径表示mac_path = "/Users/David/Documents/hello.txt"linux_path = "/home/David/Documents/hello.txt"
重要提醒:Windows用\,macOS/Linux用/,而且\在Python中是转义字符。
二、使用pathlib处理文件路径
模块导入方式对比
# 方式一:导入整个模块import pathlibpath = pathlib.Path("/path/to/file.txt")
# 方式二:导入Path类(推荐)from pathlib import Pathpath = Path("/path/to/file.txt")
创建路径对象的三种方法
引入模块:
from pathlib import Path
方法1:从字符串直接创建路径
path1 = Path("/Users/David/Documents/hello.txt")
方法2:获取当前用户的主目录路径
home_dir = Path.home()print(home_dir)
输出结果(Windows):
WindowsPath('C:\Users\用户名')
输出结果(macOS/Linux):
PosixPath('/Users/用户名')
方法3:获取当前工作目录路径
current_dir = Path.cwd()print(current_dir)
输出结果示例:
WindowsPath('C:\Users\David\Documents')
注意事项:home()和cwd()后面的小括号不能省略。
路径分隔符处理原则
核心原则:编写代码时推荐使用正斜杠/,pathlib会自动适配当前操作系统。
推荐写法:使用正斜杠,确保跨平台兼容性
path = Path.home() / "Documents" / "project"
避免写法:硬编码Windows风格分隔符
path = Path.home() / "Documents\\project"
重要提醒:Python中反斜杠\是转义字符,需要特殊处理。
# ✅ 正确:使用原始字符串path = Path(r"C:\Users\David\file.txt")
# ❌ 错误:\U被解释为Unicode转义字符path = Path("C:\Users\David\file.txt")
注意:原始字符串的前面有个r,表示忽略转义字符,保持字符串原样。
处理Windows路径的四种方案
方案1:使用原始字符串(最简洁)
path = Path(r"C:\Users\David\file.txt")
方案2:转义反斜杠
path = Path("C:\\Users\\David\\file.txt")
方案3:统一使用正斜杠
path = Path("C:/Users/David/file.txt")
方案4:路径拼接(最灵活可靠)
path = Path("C:/") / "Users" / "David" / "file.txt"
三、路径操作:组合、拆分与验证
路径组合操作
file_path = Path.home() / "Desktop" / "hello.txt"print(file_path)
输出结果示例:
WindowsPath('C:\Users\用户名\Desktop\hello.txt')
访问路径各个组成部分
# 创建一个示例路径对象path = Path.home() / "hello.txt"
获取父目录路径:
print(path.parent)
C:\Users\用户名
获取文件名:
print(path.name)
hello.txt
获取文件主干名:
print(path.stem)
hello
获取文件扩展名:
print(path.suffix)
.txt
路径验证与检查
# 创建一个不存在的路径对象path = Path.home() / "nonexistent.txt"
检查路径是否存在:
print(f"路径存在: {path.exists()}")
路径存在: False
检查是否为文件:
print(f"是文件: {path.is_file()}")
是文件: False
检查是否为目录:
print(f"是目录: {path.is_dir()}")
是目录: False
检查是否为绝对路径:
print(f"是绝对路径: {path.is_absolute()}")
是绝对路径: True
四、文件和目录操作实践
创建目录的方法
from pathlib import Path
基础创建:在当前用户主目录下创建新目录
new_dir = Path.home() / "new_directory"new_dir.mkdir()
安全创建:目录已存在时不报错
new_dir.mkdir(exist_ok=True)
创建嵌套目录:自动创建所有必需的父目录
nested_dir = new_dir / "folder_a" / "folder_b"nested_dir.mkdir(parents=True)
重要提醒:如果不加parents=True参数,当父目录不存在时会报错:
FileNotFoundError: [WinError 3] 系统找不到指定的路径
最佳实践:一键创建完整目录树
target_dir = Path.home() / "projects" / "app" / "logs"target_dir.mkdir(parents=True, exist_ok=True)
创建文件的方法
# 创建空文件file_path = new_dir / "file1.txt"file_path.touch()
执行结果:在new_dir目录中创建file1.txt空文件。
目录内容遍历与文件搜索
目录遍历与搜索方法对比
代码示例:
方法1:遍历当前目录所有内容
for item in new_dir.iterdir(): print(item.name)
输出结果示例:
file1.txtfolder_afolder_b
方法2:在当前目录搜索特定类型文件
for txt_file in new_dir.glob("*.txt"): print(f"找到文本文件: {txt_file}")
输出结果示例:
找到文本文件: C:\Users\David\new_directory\file1.txt
方法3:递归搜索所有子目录中的特定文件
for py_file in new_dir.rglob("*.py"): print(f"找到Python文件: {py_file}")
输出结果示例:
找到Python文件: C:\Users\David\new_directory\folder_a\program.py
一句话概括三种方法:
iterdir():查看这个文件夹里有什么。
glob():在这个文件夹里查找特定类型的文件。
rglob():在这个文件夹及其所有子文件夹里查找特定类型的文件。
五、总结
掌握pathlib模块,让你轻松处理文件路径的各种操作:
- 1. 统一使用正斜杠
/,让代码天然具备跨平台兼容性
记住这些核心技巧,你就能自信地处理各种文件操作场景了!
📦 资源获取提示
关注「码农自习室」,后台回复关键词 Python学习,即可获取本文完整代码,一起动手掌握高效编程的核心技巧!
❤️ 支持我们
如果觉得本文对你有帮助,欢迎点赞 + 关注,您的支持是我们持续创作优质内容的最大动力!
📚 学习资源说明
本文内容是基于《Python Basics: A Practical Introduction to Python 3》(Real Python)一书的学习笔记整理。这本书是一本非常优秀的Python入门教材,推荐给所有想要系统学习Python的朋友们。
这本书的特点:
跟着这本书学习,配合我的笔记整理,相信你能更快掌握Python编程!
让我们一起坚持学习,每天进步一点点!💪