如何使用os.chdir跳过路径的最后一步?
举个例子,假设有一个方法接收一个路径作为参数,这个路径可能是"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)