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())          # 当前工作目录(进程启动时的目录)

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

# 无论从哪里运行,都指向脚本文件所在目录
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() 代替。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台