it-swarm.com.de

Finden Sie das aktuelle Verzeichnis und das Verzeichnis der Datei

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

  1. das aktuelle Verzeichnis (wo ich mich beim Ausführen des Skripts Python im Terminal befunden habe) und
  2. wo befindet sich die Datei, die ich ausführe?
1910
John Howard

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:

  • Die Module os und os.path .
  • Die __file__ Konstante
  • os.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" )
2972
Russell Dias

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?

305
Nix

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))
256
Daniel Reis

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
_
58
skovorodkin

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"

54
vinithravit

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

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 .

29
Jazzer

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

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())
26
StormShadow

Pathlib kann folgendermaßen verwendet werden, um das Verzeichnis abzurufen, das das aktuelle Skript enthält:

import pathlib
filepath = pathlib.Path(__file__).resolve().parent
18
Mathieu C.

So rufen Sie den vollständigen Pfad des aktuellen Verzeichnisses ab:

os.path.realpath ('.')

16
Ilia S.

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

16
Grochni

Um das aktuelle Arbeitsverzeichnis anzuzeigen, geben Sie folgendes Skript ein:

import os
current_working_directory = os.getcwd()
9
Mohammad Hassan

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

6

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)
4
Nirali Khoda