Welche Befehle kann ich in Python verwenden, um Folgendes zu finden:
Um den vollständigen Pfad zu dem Verzeichnis abzurufen, in dem sich eine Python -Datei befindet, schreiben Sie Folgendes in diese Datei:
_import os
dir_path = os.path.dirname(os.path.realpath(__file__))
_
(Beachten Sie, dass die obige Beschwörung nicht funktioniert, wenn Sie bereits os.chdir()
zum Ändern Ihres aktuellen Arbeitsverzeichnisses verwendet haben, da der Wert der ___file__
_-Konstante relativ zum aktuellen Arbeitsverzeichnis ist und nicht durch einen os.chdir()
-Aufruf geändert wird .)
Verwenden Sie, um das aktuelle Arbeitsverzeichnis abzurufen
_import os
cwd = os.getcwd()
_
Dokumentationsreferenzen für die oben verwendeten Module, Konstanten und Funktionen:
os
und os.path
.__file__
Konstanteos.path.realpath(path)
(gibt "den kanonischen Pfad des angegebenen Dateinamens zurück, wobei alle im Pfad angetroffenen symbolischen Links beseitigt werden" )os.path.dirname(path)
(liefert "den Verzeichnisnamen des Pfadnamens path
" )os.getcwd()
(gibt "eine Zeichenfolge zurück, die das aktuelle Arbeitsverzeichnis darstellt" )os.chdir(path)
( "ändere das aktuelle Arbeitsverzeichnis in path
" )Aktuelles Arbeitsverzeichnis: os.getcwd()
Und das __file__
-Attribut kann Ihnen helfen, herauszufinden, wo sich die Datei befindet, die Sie ausführen. Dieser SO Beitrag erklärt alles: Wie erhalte ich den Pfad der aktuell ausgeführten Datei in Python?
Möglicherweise finden Sie dies als Referenz nützlich:
import os
print("Path at terminal when executing this file")
print(os.getcwd() + "\n")
print("This file path, relative to os.getcwd()")
print(__file__ + "\n")
print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")
print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")
print("This file directory only")
print(os.path.dirname(full_path))
pathlib
Modul, eingeführt in Python 3.4 ( PEP 428 - Das Pathlib-Modul - Objektorientierte Dateisystempfade ) pfadbezogene Erfahrung viel viel besser.
_$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
├── 1.py
└── 2.py
_
Um das aktuelle Arbeitsverzeichnis zu erhalten, verwenden Sie Path.cwd()
:
_from pathlib import Path
print(Path.cwd()) # /home/skovorodkin/stack
_
Verwenden Sie die Methode Path.resolve()
, um einen absoluten Pfad zu Ihrer Skriptdatei zu erhalten:
_print(Path(__file__).resolve()) # /home/skovorodkin/stack/scripts/1.py
_
Um den Pfad eines Verzeichnisses abzurufen, in dem sich Ihr Skript befindet, rufen Sie .parent
auf (es wird empfohlen, .resolve()
vor _.parent
_ aufzurufen):
_print(Path(__file__).resolve().parent) # /home/skovorodkin/stack/scripts
_
Denken Sie daran, dass ___file__
_ in einigen Situationen nicht zuverlässig ist: Wie erhalte ich den Pfad der aktuell ausgeführten Datei in Python? .
Beachten Sie, dass Path.cwd()
, Path.resolve()
und andere Path
-Methoden Pfadobjekte ( PosixPath
in meinem Fall) und keine Zeichenfolgen zurückgeben. In Python 3.4 und 3.5 verursachte dies einige Schmerzen, da open
die eingebaute Funktion nur mit String- oder Byte-Objekten arbeiten konnte und Path
-Objekte nicht unterstützte, sodass Sie konvertieren mussten Path
Objekte in Strings umwandeln oder Path.open()
Methode verwenden, aber für die letztere Option mussten Sie den alten Code ändern:
_$ cat scripts/2.py
from pathlib import Path
p = Path(__file__).resolve()
with p.open() as f: pass
with open(str(p)) as f: pass
with open(p) as f: pass
print('OK')
$ python3.5 scripts/2.py
Traceback (most recent call last):
File "scripts/2.py", line 11, in <module>
with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')
_
Wie Sie sehen, funktioniert open(p)
nicht mit Python 3.5.
PEP 519 - Hinzufügen eines Dateisystempfadprotokolls , implementiert in Python 3.6, fügt der Funktion PathLike
die Unterstützung von open
-Objekten hinzu Daher können Sie jetzt Path
-Objekte direkt an die Funktion open
übergeben:
_$ python3.6 scripts/2.py
OK
_
1.Um den vollständigen Pfad des aktuellen Verzeichnisses abzurufen
>>import os
>>print os.getcwd()
o/p: "C:\Users\admin\myfolder"
1.Um nur den aktuellen Verzeichnisordnernamen abzurufen
>>import os
>>str1=os.getcwd()
>>str2=str1.split('\\')
>>n=len(str2)
>>print str2[n-1]
o/p: "myfolder"
Wenn Sie versuchen, das aktuelle Verzeichnis der Datei zu finden, in der Sie sich gerade befinden:
Betriebssystemunabhängiger Weg:
dirname, filename = os.path.split(os.path.abspath(__file__))
Wenn Sie Python 3.4 verwenden, gibt es das brandneue übergeordnete pathlib
-Modul, mit dem Sie bequem pathlib.Path.cwd()
aufrufen können, um ein Path
-Objekt zu erhalten, das Ihr Objekt darstellt aktuelles Arbeitsverzeichnis, zusammen mit vielen anderen neuen Funktionen.
Weitere Informationen zu dieser neuen API finden Sie hier .
Antwort auf # 1:
Wenn Sie das aktuelle Verzeichnis haben möchten, gehen Sie wie folgt vor:
import os
os.getcwd()
Wenn Sie nur einen Ordnernamen möchten und den Pfad zu diesem Ordner haben, gehen Sie folgendermaßen vor:
def get_folder_name(folder):
'''
Returns the folder name, given a full folder path
'''
return folder.split(os.sep)[-1]
Antwort auf # 2:
import os
print os.path.abspath(__file__)
Ein bisschen zu spät zur Party, aber ich denke, der prägnanteste Weg, um nur den Namen Ihres aktuellen Hinrichtungskontexts zu finden, wäre
current_folder_path, current_folder_name = os.path.split(os.getcwd())
Pathlib kann folgendermaßen verwendet werden, um das Verzeichnis abzurufen, das das aktuelle Skript enthält:
import pathlib
filepath = pathlib.Path(__file__).resolve().parent
So rufen Sie den vollständigen Pfad des aktuellen Verzeichnisses ab:
os.path.realpath ('.')
Wenn Sie nach dem Speicherort des aktuell ausgeführten Skripts suchen, können Sie sys.argv[0]
verwenden, um den vollständigen Pfad abzurufen.
Um das aktuelle Arbeitsverzeichnis anzuzeigen, geben Sie folgendes Skript ein:
import os
current_working_directory = os.getcwd()
Für Frage 1 benutzen Sie os.getcwd() # get working dir
und os.chdir(r'D:\Steam\steamapps\common') # set working dir
Ich empfehle die Verwendung von sys.argv[0]
für Frage 2, da sys.argv
unveränderlich ist und daher immer die aktuelle Datei (Modulobjektpfad) zurückgibt und nicht von os.chdir()
betroffen ist. Auch das kannst du so machen:
import os
this_py_file = os.path.realpath(__file__)
# vvv Below comes your code vvv #
aber dieses Snippet und sys.argv[0]
werden nicht funktionieren oder werden seltsam funktionieren, wenn es von PyInstaller kompiliert wird, da die magischen Eigenschaften nicht auf __main__
und sys.argv[0]
eingestellt sind, wie Ihre Exe aufgerufen wurde (bedeutet dies) wirkt sich auf die Arbeitsrichtung aus).
So erhalten Sie Ihr Arbeitsverzeichnis in Python. Sie können folgenden Code verwenden:
import os
cwd = os.getcwd() #to get current working directory
print(cwd)