2

目前我不明白,为什么蟒蛇的os.path.dirname行为如此。

假设我有以下脚本:

# Not part of the script, just for the current sample
__file__ = 'C:\\Python\\Test\\test.py'

然后我尝试获取以下目录的绝对路径:C:\\Python\\doc\\py

使用此代码:

base_path = os.path.dirname(os.path.dirname(os.path.realpath(__file__)) + '\\..\\doc\\py\\')

但是为什么该方法os.path.dirname没有解析路径,并打印出(print (base_path)

C:\Python\Test\..\doc\py

我期望该方法可以解决以下路径:

C:\Python\Test\doc\py

我只是从 .NET Framework 中知道这种行为,获取目录路径将始终解析完整路径并使用..\\. 我在 Python 中有什么可以做到这一点?

4

2 回答 2

3

调查os.path.normpath

通过折叠冗余分隔符和上层引用来规范化路径名,以便 A//B、A/B/、A/./B 和 A/foo/../B 都变为 A/B。这种字符串操作可能会改变包含符号链接的路径的含义。在 Windows 上,它将正斜杠转换为反斜杠。

之所以os.path.dirname如此,是因为它不是很聪明——它甚至适用于 URL!

os.path.dirname("http://www.google.com/test")  # outputs http://www.google.com

它只是在最后一个斜线之后砍掉任何东西。它在最后一个斜线之前不看任何东西,所以它不在乎你是否/../在某个地方。

于 2015-12-28T07:42:39.193 回答
2

os.path.normpath()将返回一个规范化的路径,所有对当前或父目录的引用都被适当地删除或替换。

于 2015-12-28T07:41:41.090 回答