如何使用os.chdir跳过路径的最后一步?

2 投票
3 回答
9912 浏览
提问于 2025-04-16 19:19

举个例子,假设有一个方法接收一个路径作为参数,这个路径可能是"C:/a/b/c/d"。如果我想用os.chdir()来切换到C:/a/b/c(也就是去掉最后一个文件夹),那os.chdir()能不能使用".."这个命令呢?

3 个回答

2

os.path模块里有一些函数,可以帮助处理这类问题。

os.path.normpath()这个函数可以把包含像..这样的路径引用的路径转换成一个绝对路径。这样做可以确保无论操作系统如何处理路径,结果都是一致的。

os.chdir(os.path.normpath("C:/a/b/c/.."))应该能实现你想要的效果。

3

你可以使用 os.path.dirname 这个功能:

In [1]: import os.path

In [2]: os.path.dirname('C:/a/b/c/d')
Out[2]: 'C:/a/b/c'

补充说明:有人指出,如果路径最后有一个斜杠,这个方法不会去掉最后一部分。为了更稳妥,我建议使用以下方法:

In [5]: os.path.normpath(os.path.join('C:/a/b/c/d', '..'))
Out[5]: 'C:/a/b/c'

In [6]: os.path.normpath(os.path.join('C:/a/b/c/d/', '..'))
Out[6]: 'C:/a/b/c'

这里的 '..' 可以用 os.path.pardir 来替代,这样代码会更具可移植性(至少在理论上是这样)。

10

os.chdir() 确实可以接受 '..' 作为参数,这样可以让你返回到上一级目录。不过,Python 还提供了一种不依赖于操作系统的方法,那就是使用 os.pardir

os.chdir(os.pardir)

撰写回答