有人能告诉我如何在Python中跨平台获取路径的父目录吗?如。

C:\Program Files ---> C:\

and

C:\ ---> C:\

如果目录没有父目录,则返回目录本身。这个问题似乎很简单,但我无法从谷歌中找到它。


当前回答

import os
p = os.path.abspath('..')

C:\Program Files——> C:\\\

C:\\\

其他回答

只是在Tung的答案中添加了一些东西(如果你在unix机器上,你需要使用rstrip('/')来更安全)。

>>> input1 = "../data/replies/"
>>> os.path.dirname(input1.rstrip('/'))
'../data'
>>> input1 = "../data/replies"
>>> os.path.dirname(input1.rstrip('/'))
'../data'

但是,如果你不使用rstrip('/'),给定你的输入是

>>> input1 = "../data/replies/"

将输出,

>>> os.path.dirname(input1)
'../data/replies'

这可能不是你所看到的,因为你想要两者。/data/replies/" and "../data/回复“以同样的方式表现。

使用os.path.dirname:

>>> os.path.dirname(r'C:\Program Files')
'C:\\'
>>> os.path.dirname('C:\\')
'C:\\'
>>>

注意:os.path.dirname()会给出不同的结果,这取决于路径中是否包含后面的斜杠。这可能是也可能不是您想要的语义。Cf. @kender的答案使用os.path。加入(yourpath os.pardir)。

import os 

def parent_directory():
  # Create a relative path to the parent of the current working directory 
  relative_parent = os.path.join(os.getcwd(), "..") # .. means parent directory

  # Return the absolute path of the parent directory
  return os.path.abspath(relative_parent)

print(parent_directory())
import os
print"------------------------------------------------------------"
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
print("example 1: "+SITE_ROOT)
PARENT_ROOT=os.path.abspath(os.path.join(SITE_ROOT, os.pardir))
print("example 2: "+PARENT_ROOT)
GRANDPAPA_ROOT=os.path.abspath(os.path.join(PARENT_ROOT, os.pardir))
print("example 3: "+GRANDPAPA_ROOT)
print "------------------------------------------------------------"
import os
p = os.path.abspath('..')

C:\Program Files——> C:\\\

C:\\\