Как мне получить родительский каталог в Python? - PullRequest
278 голосов
/ 18 мая 2010

Может кто-нибудь сказать мне, как получить родительский каталог пути в Python кросс-платформенным способом. Э.Г.

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

и

C:\ ---> C:\

Если каталог не имеет родительского каталога, он возвращает сам каталог. Вопрос может показаться простым, но я не могу найти его в Google.

Ответы [ 18 ]

2 голосов
/ 03 мая 2011
print os.path.abspath(os.path.join(os.getcwd(), os.path.pardir))

Вы можете использовать это для получения родительского каталога текущего местоположения вашего py-файла.

2 голосов
/ 30 июля 2014
import os.path

os.path.abspath(os.pardir)
2 голосов
/ 16 ноября 2015

Просто добавьте что-то к ответу Тунга (вам нужно использовать rstrip('/'), чтобы быть более безопасным, если вы работаете в Unix).

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

Но, если вы не используете rstrip('/'), учитывая ваш ввод

>>> input = "../data/replies/"

выдаст,

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

это, вероятно, не то, на что вы смотрите, поскольку вы хотите, чтобы и "../data/replies/", и "../data/replies" вели себя одинаково.

1 голос
/ 05 ноября 2016
import os

dir_path = os.path.dirname(os.path.realpath(__file__))
parent_path = os.path.abspath(os.path.join(dir_path, os.pardir))
0 голосов
/ 01 августа 2018

Все приведенные выше ответы идеально подходят для перехода на один или два уровня каталогов, но они могут стать немного громоздкими, если нужно пройти по множеству уровней каталогов (скажем, 5 или 10). Это можно сделать кратко, присоединив список N os.pardir s в os.path.join. Пример:

import os
# Create list of ".." times 5
upup = [os.pardir]*5
# Extract list as arguments of join()
go_upup = os.path.join(*upup)
# Get abspath for current file
up_dir = os.path.abspath(os.path.join(__file__, go_upup))
0 голосов
/ 21 апреля 2014

GET Parent Directory Path и make New directory (имя new_dir)

Получить путь к родительскому каталогу

os.path.abspath('..')
os.pardir

Пример 1

import os
print os.makedirs(os.path.join(os.path.dirname(__file__), os.pardir, 'new_dir'))

Пример 2

import os
print os.makedirs(os.path.join(os.path.dirname(__file__), os.path.abspath('..'), 'new_dir'))
0 голосов
/ 08 сентября 2016
import os

def parent_filedir(n):
    return parent_filedir_iter(n, os.path.dirname(__file__))

def parent_filedir_iter(n, path):
    n = int(n)
    if n <= 1:
        return path
    return parent_filedir_iter(n - 1, os.path.dirname(path))

test_dir = os.path.abspath(parent_filedir(2))
0 голосов
/ 02 июля 2014
os.path.abspath('D:\Dir1\Dir2\..')

>>> 'D:\Dir1'

Так что .. помогает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...