pathlib介绍-比os.path更好的路径处理方式

文章来源: https://zhuanlan.zhihu.com/p/33524938

我们先来聊下三种操作系统windows、Mac 和 Linux,

Windows filenames:
C:\some_folder\some_file.txt
Most other operating systems:
/some_folder/some_file.txt

如上所示,带来的一个编程小麻烦就是不同的操作系统,文件连接所用正反斜线是不一致的。

这是一个有趣的历史:early 1980’s computer history

现在,python3有一个pathlib的模块,可以让你优雅的工作。

错误的方式:手动拼接

data_folder = "source_data/text_files/"

file_to_open = data_folder + "raw_data.txt"

f = open(file_to_open)

print(f.read())

这样写,你不能让每个操作系统都能顺利执行。并会让其他程序员用怀疑的眼光看着你。

旧的解决方式:os.path模块

import os.path

data_folder = os.path.join("source_data", "text_files")

file_to_open = os.path.join(data_folder, "raw_data.txt")

f = open(file_to_open)

print(f.read())

此代码可以在各个平台顺利运行,但是反复使用os.path.join很啰嗦,重点是一点都不优雅!

os.path有很多功能,但是比较繁琐,导致大家虽然都知道,但是就是懒得用。

更好解决方式:pathlib模块

python3.4+ 都自带标准库pathlib,所以你不需要再通过pip3 安装,这很cool

你只需要这样

from pathlib import Path

data_folder = Path("source_data/text_files/")

file_to_open = data_folder / "raw_data.txt"

f = open(file_to_open)

print(f.read())

至此,你用一个非常优雅的方式解决了一个重大问题,但是你以为pathlib仅此而已了吗?

你可用它读文件,而不需要open()

from pathlib import Path

data_folder = Path("source_data/text_files/")

file_to_open = data_folder / "raw_data.txt"

print(file_to_open.read_text())

更cool的是,pathlib可以让你常用的文件及路径操作变得极为简单快捷

from pathlib import Path

filename = Path("source_data/text_files/raw_data.txt")

print(filename.name)
# prints "raw_data.txt"

print(filename.suffix)
# prints "txt"

print(filename.stem)
# prints "raw_data"

if not filename.exists():
    print("Oops, file doesn't exist!")
else:
    print("Yay, the file exists!")

同学们,快去尝试吧。这里是官方地址:

11.1. pathlib - Object-oriented filesystem paths - Python 3.6.4 documentation

参考文章:

11.1. pathlib - Object-oriented filesystem paths - Python 3.6.4 documentation

https://medium.com/@ageitgey/python-3-quick-tip-the-easy-way-to-deal-with-file-paths-on-windows-mac-and-linux-11a072b58d5f

<think>好的,我现在需要帮用户解决如何使用Python的os.path模块来获取目录路径的问题。用户提到了os.path,可能他们需要具体的函数和示例。首先,我得回忆一下os.path模块的常用函数,特别是与目录路径相关的。 首先,用户的问题是关于获取目录路径的,所以主要的函数应该是os.path.dirname()。这个函数可以返回路径中的目录部分,也就是去掉文件名后的部分。比如,路径是"/home/user/docs/file.txt",使用dirname后得到"/home/user/docs"。这个函数应该是最直接的答案。 接下来,用户可能还需要知道如何获取当前文件的目录或者处理不同操作系统下的路径问题。这时候,可能需要提到os.path.abspath()os.path.dirname(__file__)的组合,用来获取当前脚本所在的目录。这个在项目开发中很常见,特别是在需要相对路径时。 另外,用户可能想知道如何获取父目录或者多层上级目录。这时候可以提到多次调用dirname,比如os.path.dirname(os.path.dirname(path)),这样就能得到上级的上级目录。或者结合os.pardir,使用os.path.join()来构造路径,但dirname的方式可能更直观。 还有,用户可能会关心路径的存在性检查。比如,在获取目录路径后,可能需要确认该目录是否存在,这时候可以用os.path.isdir()。这虽然不是直接获取路径,但常常和路径处理一起使用,确保后续操作的有效性。 然后,路径的拼接也是一个相关的问题。用户可能需要将目录路径和文件名组合,这时候应该推荐os.path.join(),因为它能自动处理不同操作系统的路径分隔符问题,避免手动拼接带来的错误。 需要注意的是,用户提供的引用中有提到pathlib模块,比如Path.parent,但用户明确询问的是os.path模块,所以虽然pathlib更现代,但回答应集中在os.path上。不过可能可以稍微提及,作为补充信息,但主要展示os.path的方法。 现在要整理这些点,确保每个步骤都有示例代码。比如,dirname的基本用法,多层目录获取,当前脚本目录,检查是否存在,路径拼接等。每个示例要简洁,并注释输出结果,方便用户理解。 还要注意不同操作系统的路径差异,比如Windows使用反斜杠,而Linux/macOS使用正斜杠,但os.path的函数会自动处理这些,所以示例中使用哪种路径格式都没问题,但最好展示通用性。 最后,生成相关问题,可能涉及其他os.path函数,优化方法,与pathlib的比较,或者常见错误处理,比如路径不存在时的异常处理。这样用户如果有进一步的问题,可以自行探索。 总结一下,回答的结构应该是先介绍os.path.dirname(),然后其他相关函数和用例,每个用例配代码示例,最后给出相关问题。确保回答清晰,步骤明确,符合用户的需求。</think>### 使用 `os.path` 模块获取目录路径的方法及示例 #### 1. **获取路径中的目录部分** 使用 `os.path.dirname()` 函数可直接提取路径的目录部分: ```python import os file_path = "/home/user/documents/report.docx" dir_path = os.path.dirname(file_path) print(dir_path) # 输出: /home/user/documents ``` 此方法适用于从完整文件路径中分离出目录[^3]。 --- #### 2. **获取当前脚本的目录路径** 结合 `os.path.abspath(__file__)` 和 `os.path.dirname()` 获取当前脚本所在目录: ```python import os current_dir = os.path.dirname(os.path.abspath(__file__)) print(current_dir) # 输出脚本所在的绝对路径 ``` 常用于项目开发中定位资源文件[^2]。 --- #### 3. **获取多层父级目录** 通过嵌套调用 `os.path.dirname()` 获取上级目录: ```python import os file_path = "/home/user/documents/project/file.txt" parent_dir = os.path.dirname(os.path.dirname(file_path)) print(parent_dir) # 输出: /home/user/documents ``` 也可用 `os.pardir` 符号化表示(需结合 `os.path.join`)[^4]。 --- #### 4. **路径存在性检查** 验证目录是否存在: ```python import os dir_path = "/home/user/documents" if os.path.isdir(dir_path): print("目录有效") else: print("目录不存在") ``` 确保后续操作的安全性[^4]。 --- #### 5. **路径拼接与规范化** 使用 `os.path.join()` 安全拼接路径: ```python import os base_dir = "/home/user" sub_dir = "documents" file_name = "report.docx" full_path = os.path.join(base_dir, sub_dir, file_name) print(full_path) # 输出: /home/user/documents/report.docx ``` 自动处理不同操作系统的路径分隔符[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值