Python 中如何获取当前目录和文件的上级目录?

Python 获取当前工作目录用 os.getcwd() 或 Path.cwd();获取文件所在目录用 os.path.dirname() 或 Path.parent;脚本自身位置用 __file__。本文对比各种方式。

最佳实践
Python 中如何获取当前目录和文件的上级目录?封面

当前工作目录:os.getcwd() 或 Path.cwd();某文件的上级目录:os.path.dirname(path) 或 Path(path).parent;脚本自身所在目录:Path(__file__).parent(注意和工作目录不是一回事)。

当前工作目录

import os
print(os.getcwd())          # 当前工作目录,可由os.chdir()等改变

from pathlib import Path
print(Path.cwd())           # 同上,pathlib 风格

文件的上级目录

import os
file_path = '/path/to/file.txt'
print(os.path.dirname(file_path))   # /path/to

from pathlib import Path
print(Path(file_path).parent)        # /path/to
print(Path(file_path).parent.parent) # /path——可以再上一级

脚本自身所在目录(重要)

from pathlib import Path

# 对有__file__的文件模块,resolve会解析绝对路径并跟随符号链接
BASE_DIR = Path(__file__).resolve().parent

os.getcwd() vs __file__:前者是进程当前工作目录,后者是"脚本文件在哪"。读配置文件、模板等资源应该用 __file__ 定位,否则换个目录运行就找不到文件。

常见问题(FAQ)

Q:dirname 对相对路径返回什么?
A:原样处理字符串:os.path.dirname('a/b.txt') 返回 'a';os.path.dirname('b.txt') 返回 ''。建议先 os.path.abspath() 转绝对路径。

Q:pathlib 和 os.path 选哪个?
A:新代码用 pathlib——面向对象、运算符拼接(Path('/a') / 'b' / 'c.txt')、跨平台。

Q:Jupyter Notebook 里没有 file?
A:Notebook 中 __file__ 未定义,Path.cwd()/os.getcwd() 得到内核进程工作目录,不保证是 Notebook 文档所在目录;资源根目录应显式指定。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台