Frage Finde das aktuelle Verzeichnis und das Verzeichnis der Datei [duplizieren]


Diese Frage hat hier bereits eine Antwort:

Welche Befehle kann ich in Python verwenden, um Folgendes zu finden:

  1. das aktuelle Verzeichnis (wo ich beim Ausführen des Python-Skripts im Terminal war) und
  2. wo ist die Datei, die ich ausführe?

1493
2018-02-28 01:51


Ursprung


Antworten:


Um den vollständigen Pfad zu dem Verzeichnis zu erhalten, in dem eine Python-Datei enthalten ist, schreiben Sie dies in diese Datei:

import os 
dir_path = os.path.dirname(os.path.realpath(__file__))

(Beachte, dass die obige Beschwörung nicht funktioniert, wenn du sie bereits benutzt hast os.chdir() um das aktuelle Arbeitsverzeichnis zu ändern, da der Wert von __file__ Konstante ist relativ zum aktuellen Arbeitsverzeichnis und wird nicht durch ein geändert os.chdir() Anruf.)


Verwenden Sie das aktuelle Arbeitsverzeichnis

import os
cwd = os.getcwd()

Dokumentationsreferenzen für die oben verwendeten Module, Konstanten und Funktionen:

  • Das os und os.path Module.
  • Das __file__ Konstante
  • os.path.realpath(path) (kehrt zurück "der kanonische Pfad des angegebenen Dateinamens, wobei alle symbolischen Links im Pfad entfernt werden")
  • os.path.dirname(path) (kehrt zurück "Der Verzeichnisname von Pfadname path")
  • os.getcwd() (kehrt zurück "eine Zeichenfolge, die das aktuelle Arbeitsverzeichnis darstellt")
  • os.chdir(path) ("Ändern Sie das aktuelle Arbeitsverzeichnis in path")

2263
2018-02-28 01:54



Aktuelles Arbeitsverzeichnis: os.getcwd ()

Und das __file__ Attribut  kann Ihnen helfen herauszufinden, wo sich die Datei befindet, die Sie gerade ausführen. Dieser SO Post erklärt alles: Wie bekomme ich den Pfad der aktuell ausgeführten Datei in Python?


271
2018-02-28 01:53



Sie können dies nützlich als Referenz finden:

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))

225
2017-12-05 10:18



1. Um den aktuellen Pfad des Verzeichnisses zu erhalten

    >>import os
    >>print os.getcwd()

o / p: "C: \ Benutzer \ Admin \ MeinFolder"

1. Um den aktuellen Verzeichnisordnernamen zu erhalten

    >>import os
    >>str1=os.getcwd()
    >>str2=str1.split('\\')
    >>n=len(str2)
    >>print str2[n-1]

o / p: "Mein Ordner"


47
2018-04-24 07:00



Wenn Sie versuchen, das aktuelle Verzeichnis der Datei zu finden, in der Sie sich gerade befinden:

OS-agnostischer Weg:

dirname, filename = os.path.split(os.path.abspath(__file__))

33
2017-10-07 09:10



Antwort auf # 1:

Wenn Sie das aktuelle Verzeichnis möchten, tun Sie dies:

import os
os.getcwd()

Wenn Sie nur einen Ordnernamen haben möchten und den Pfad zu diesem Ordner haben, tun Sie Folgendes:

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__)

26
2017-11-05 09:31



Ein bisschen spät auf die Party, aber ich denke, der kürzeste Weg, um nur den Namen Ihres aktuellen Ausführungskontexts zu finden wäre

current_folder_path, current_folder_name = os.path.split(os.getcwd())

25
2017-10-09 10:31



Wenn Sie Python 3.4 verwenden, gibt es die brandneue höhere Ebene pathlib Modul, mit dem Sie bequem anrufen können pathlib.Path.cwd() einen bekommen Path Objekt, das Ihr aktuelles Arbeitsverzeichnis zusammen mit vielen anderen neuen Funktionen darstellt.

Weitere Informationen zu dieser neuen API finden Sie Hier.


24
2018-02-20 20:32



pathlib Modul, eingeführt in Python 3.4 (PEP 428 - Das Pathlib-Modul - objektorientierte Dateisystempfade), macht die pfadbezogene Erfahrung viel besser.

$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
    ├── 1.py
    └── 2.py

Um das aktuelle Arbeitsverzeichnis zu verwenden Path.cwd():

from pathlib import Path

print(Path.cwd())  # /home/skovorodkin/stack

Um einen absoluten Pfad zu Ihrer Skriptdatei zu erhalten, verwenden Sie Path.resolve() Methode:

print(Path(__file__).resolve())  # /home/skovorodkin/stack/scripts/1.py

Um auf den Pfad eines Verzeichnisses zu gelangen, in dem sich Ihr Skript befindet, greifen Sie darauf zu .parent(es wird empfohlen, anzurufen .resolve() Vor .parent):

print(Path(__file__).resolve().parent)  # /home/skovorodkin/stack/scripts

Erinnere dich daran __file__ ist in einigen Situationen nicht zuverlässig: Wie bekomme ich den Pfad der aktuell ausgeführten Datei in Python?.


Bitte beachte, dass Path.cwd(), Path.resolve() und andere Path Methoden geben Pfadobjekte zurück (PosixPath in meinem Fall), keine Strings. In Python 3.4 und 3.5 verursachte das einige Schmerzen, weil open Die integrierte Funktion konnte nur mit String- oder Byte-Objekten arbeiten und wurde nicht unterstützt Path Objekte, also musst du konvertieren Path Objekte zu Zeichenfolgen oder verwenden Path.open() Methode, aber die letztere Option erfordert, dass Sie 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 du siehst open(p) funktioniert nicht mit Python 3.5.

PEP 519 - Hinzufügen eines Dateisystempfadprotokolls, in Python 3.6 implementiert, fügt Unterstützung von PathLike Objekte zu open Funktion, so können Sie jetzt übergeben Path Objekte zu open Funktion direkt:

$ python3.6 scripts/2.py
OK

20
2017-09-05 19:14



Wenn Sie nach dem Ort des aktuell ausgeführten Skripts suchen, können Sie verwenden sys.argv[0] um den vollständigen Pfad zu erhalten.


17
2017-08-12 11:27