Frage

Angesichts eines Pfades wie "mydir/myfile.txt", wie finde ich den absoluten Pfad der Datei relativ zum aktuellen Arbeitsverzeichnis in Python?Z.B.Unter Windows erhalte ich möglicherweise Folgendes:

"C:/example/cwd/mydir/myfile.txt"
War es hilfreich?

Lösung

>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Funktioniert auch, wenn es bereits ein absoluter Pfad ist:

>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Andere Tipps

Sie könnten die neue Python 3.4-Bibliothek verwenden pathlib.(Sie können es auch für Python 2.6 oder 2.7 erhalten mit pip install pathlib.) Die Autoren schrieb:„Das Ziel dieser Bibliothek besteht darin, eine einfache Hierarchie von Klassen bereitzustellen, um Dateisystempfade und die allgemeinen Operationen, die Benutzer damit ausführen, zu verwalten.“

So erhalten Sie einen absoluten Pfad in Windows:

>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\\Python27\\pythonw.exe'

Oder unter UNIX:

>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'

Dokumente finden Sie hier: https://docs.python.org/3/library/pathlib.html

>>> import os
>>> os.path.abspath('mydir/myfile.txt')
'C:\\example\\cwd\\mydir\\myfile.txt'
>>> 

Besser noch: Installieren Sie das Modul (zu finden auf PyPI), es umschließt alles os.path Funktionen und andere verwandte Funktionen in Methoden für ein Objekt, die überall dort verwendet werden können, wo Zeichenfolgen verwendet werden:

>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\\example\\cwd\\mydir\\myfile.txt'
>>>

Heute können Sie auch das verwenden unipath Paket, auf dem basiert path.py: http://sluggo.scrapping.cc/python/unipath/

>>> from unipath import Path
>>> absolute_path = Path('mydir/myfile.txt').absolute()
Path('C:\\example\\cwd\\mydir\\myfile.txt')
>>> str(absolute_path)
C:\\example\\cwd\\mydir\\myfile.txt
>>>

Ich würde empfehlen, dieses Paket zu verwenden, da es angeboten wird eine saubere Schnittstelle zu gängigen os.path-Dienstprogrammen.

Update für Python 3.4+ pathlib das beantwortet tatsächlich die Frage:

from pathlib import Path

relative = Path("mydir/myfile.txt")
absolute = relative.absolute()  # absolute is a Path object

Wenn Sie nur eine temporäre Zeichenfolge benötigen, denken Sie daran, dass Sie diese verwenden können Path Objekte mit allen relevanten Funktionen in os.path, natürlich auch abspath:

from os.path import abspath

absolute = abspath(relative)  # absolute is a str object
import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

Beachten Sie, dass expanduser ist erforderlich (unter Unix), falls der angegebene Ausdruck für den Namen und Speicherort der Datei (oder des Verzeichnisses) ein führendes Zeichen enthalten kann ~/(Die Tilde bezieht sich auf das Home-Verzeichnis des Benutzers) und expandvars kümmert sich um alle anderen Umgebungsvariablen (wie $HOME).

Ich bevorzuge die Verwendung von Glob

So listen Sie alle Dateitypen in Ihrem aktuellen Ordner auf:

import glob
for x in glob.glob():
    print(x)

Hier erfahren Sie, wie Sie beispielsweise alle TXT-Dateien in Ihrem aktuellen Ordner auflisten:

import glob
for x in glob.glob('*.txt'):
    print(x)

Hier erfahren Sie, wie Sie alle Dateitypen in einem ausgewählten Verzeichnis auflisten:

import glob
for x in glob.glob('C:/example/hi/hello/'):
    print(x)

Ich hoffe, das hat dir geholfen

Modul os Bietet eine Möglichkeit, den Bauchmuskelpfad zu finden.

ABER Die meisten Pfade in Linux beginnen mit ~ (Tilde), was kein zufriedenstellendes Ergebnis liefert.

damit Sie es verwenden können srblib dafür.

>>> import os
>>> os.path.abspath('~/hello/world')
'/home/srb/Desktop/~/hello/world'
>>> from srblib import abs_path
>>> abs_path('~/hello/world')
'/home/srb/hello/world'

Installieren Sie es mit python3 -m pip install srblib

https://pypi.org/project/srblib/

wenn Sie einen Mac verwenden

import os
upload_folder = os.path.abspath("static/img/users")

Dadurch erhalten Sie einen vollständigen Pfad:

print(upload_folder)

zeigt den folgenden Pfad an:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user

Falls jemand Python und Linux verwendet und nach dem vollständigen Pfad zur Datei sucht:

>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file

Das stets Ruft den richtigen Dateinamen des aktuellen Skripts ab, auch wenn es aus einem anderen Skript aufgerufen wird.Es ist besonders nützlich bei der Verwendung subprocess.

import sys,os

filename = sys.argv[0]

Von dort aus können Sie den vollständigen Pfad des Skripts abrufen mit:

>>> os.path.abspath(filename)
'/foo/bar/script.py'

Es erleichtert auch die Navigation durch Ordner, indem es einfach angehängt wird /.. so oft, wie Sie in der Verzeichnishierarchie nach oben gelangen möchten.

So erhalten Sie das cwd:

>>> os.path.abspath(filename+"/..")
'/foo/bar'

Für den übergeordneten Pfad:

>>> os.path.abspath(filename+"/../..")
'/foo'

Durch Kombinieren "/.." Mit anderen Dateinamen können Sie auf jede Datei im System zugreifen.

filePath = os.path.abspath(directoryName)
filePathWithSlash = filePath + "\\"
filenameWithPath = os.path.join(filePathWithSlash, filename)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top