Czy istnieje prosty sposób na podniesienie jednego katalogu w pythonie za pomocą pojedynczego wiersza kodu? Coś podobnego do cd ..
w wierszu poleceńPrzenoszenie jednego katalogu w Pythonie
Odpowiedz
>>> import os
>>> print os.path.abspath(os.curdir)
C:\Python27
>>> os.chdir("..")
>>> print os.path.abspath(os.curdir)
C:\
użyć modułu os
:
import os
os.chdir('..')
powinien działać
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'
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
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.
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
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
Zgadzam się, ale po prostu zastanawiam się: Zastanawiam się, czy * kiedykolwiek * będzie prawdziwym systemem, który nie używa tej konkretnej konwencji. – aestrivex
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.
Pokonaj mnie! –
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! –