2013-07-26 13 views

Odpowiedz

31
>>> import os 
>>> print os.path.abspath(os.curdir) 
C:\Python27 
>>> os.chdir("..") 
>>> print os.path.abspath(os.curdir) 
C:\ 
23

użyć modułu os:

import os 
os.chdir('..') 

powinien działać

+0

Pokonaj mnie! –

+2

LOL - wiesz, jak się czujesz zbyt często :) Szybkość, z jaką pojawiają się tutaj odpowiedzi, czasami jest szalona - przysięgam, że niektórzy ludzie żyją na SO! –

12

Oczywiście że os.chdir ('..') jest prawidłowa odpowiedź tutaj. Ale tylko dla FYI, jeśli w przyszłości natkniesz się na sytuacje, gdy musisz w znacznym stopniu manipulować katalogami i ścieżkami, oto świetny pakiet (Unipath), który pozwala traktować je jako obiekty Pythona: https://pypi.python.org/pypi/Unipath

dzięki czemu możesz zrobić coś tak:

>>> from unipath import Path 
>>> p = Path("/usr/lib/python2.5/gopherlib.py") 
>>> p.parent 
Path("/usr/lib/python2.5") 
>>> p.name 
Path("gopherlib.py") 
>>> p.ext 
'.py' 
+0

W python3.4 wprowadzono * pathlib *, który miał rozwiązać ten sam problem (więcej informacji na ten temat można znaleźć w mojej odpowiedzi). – Kim

8

Cóż .. Nie jestem pewien, jak naprawdę przenośne os.chdir ("..") byłoby. W systemie Unix są to prawdziwe nazwy plików. Wolałbym następujące:

import os 
os.chdir(os.path.dirname(os.getcwd())) 

Który pobiera bieżący katalog roboczy, krok do jednego katalogu, a następnie zmienia się do tego katalogu.

+5

również, z nieco mniejszym pisaniem, 'os.chdir (os.path.pardir)'. Ta odpowiedź jest nieco bardziej niezależna od platformy, ale jest to kwestia sporna, ponieważ można sobie wyobrazić platformę, która nie reprezentuje ".." jako katalogu nadrzędnego, żadnej platformy, z której obecnie korzysta każdy użytkownik (w tym zarówno okna, jak i UNIX) reprezentują to w ten sposób. – aestrivex

+0

Tak, masz rację! Właśnie skończyłem testowanie go na oknie Windows, a '..' działa dobrze. Zawsze tak mało oczekuję okien, ale czasami mnie to zaskakuje :). Mimo to magiczne struny zaśmiecające mój kod zawsze przeszkadzają mi. – aychedee

+0

Zgadzam się, ale po prostu zastanawiam się: Zastanawiam się, czy * kiedykolwiek * będzie prawdziwym systemem, który nie używa tej konkretnej konwencji. – aestrivex

2

W Pythonie 3.4 pathlib wprowadzono:

>>> from pathlib import Path 
>>> p = Path('/etc/usr/lib') 
>>> p 
PosixPath('/etc/usr/lib') 
>>> p.parent 
PosixPath('/etc/usr') 

Jest również wyposażony w wiele innych przydatnych funkcji np do łączenia ścieżek za pomocą ukośników lub łatwego chodzenia po drzewie katalogów.

Aby uzyskać więcej informacji, zapoznaj się z docs lub this post, która obejmuje różnice między os.path i pathlib.

Powiązane problemy