(一)用路径找到要保存的数据
1. Path 对象与路径拼接
先把两本书写进一个文本文件,再读回来:
# Path 表示文件系统路径;/ 在这里拼接目录与文件名。
from pathlib import Path
folder = Path("data")
folder.mkdir(parents=True, exist_ok=True)
path = folder / "titles.txt"
path.write_text("Python\nNumPy\n", encoding="utf-8")
print(path.read_text(encoding="utf-8").splitlines())
print(path.name, path.suffix, path.parent.name)
print(path.is_file())输出 ['Python', 'NumPy']、titles.txt .txt data 和 True。mkdir 创建目录,parents=True 连同缺少的上级目录一起建立,exist_ok=True 接受目录已经存在。name 是文件名,suffix 是后缀,parent 是上一级路径。
write_text 写入整份字符串并关闭文件,目标原有内容被替换;read_text 读取整份文本并关闭文件。它们适合这份很小的记录,后面再处理逐行读取。exists() 判断路径是否存在,is_file() 与 is_dir() 区分文件和目录;sorted(folder.glob("*.txt")) 可以按名字查找这一层中的文本文件,rglob 继续搜索子目录。pathlib 路径操作
2. 当前工作目录与脚本位置
Path("data") 仍然是相对路径,它从第一章讲过的当前工作目录开始解释。把同一文件从另一个目录启动,可能会找到另一份 data。
# __file__ 是当前脚本文件的位置,resolve 把它转成解析后的绝对路径。
from pathlib import Path
script = Path(__file__).resolve()
data_path = script.parent / "data" / "books.json"
print(script.suffix)
print(data_path.is_absolute())
print(data_path.name)输出 .py、True、books.json。这个例子要保存成脚本运行;交互窗口不是一份脚本文件,没有对应的 __file__。需要随代码定位的资料,可以从脚本位置出发;由用户选择的数据文件,则把路径作为启动参数传入。