wenn ich ls -l /etc/fonts/conf.d/70-yes-bitmaps.conf gebe
lrwxrwxrwx <snip> /etc/fonts/conf.d/70-yes-bitmaps.conf -> ../conf.avail/70-yes-bitmaps.conf
so finden Sie für einen symbolischen Link oder einen Softlink den vollständigen (absoluten) Pfad der Zieldatei in Python.
Wenn ich benutze
os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf')
es gibt aus
../conf.avail/70-yes-bitmaps.conf
aber ich brauche den absoluten Pfad nicht den relativen Pfad, also muss meine gewünschte Ausgabe sein,
/etc/fonts/conf.avail/70-yes-bitmaps.conf
so ersetzen Sie den ..
durch den tatsächlichen vollständigen Pfad des übergeordneten Verzeichnisses der symbolischen Verknüpfung oder der Softlink-Datei.
os.path.realpath(path)
os.path.realpath gibt den kanonischen Pfad des angegebenen Dateinamens zurück und beseitigt alle symbolischen Links im Pfad.
Wie unutbu sagt, sollte os.path.realpath(path)
die richtige Antwort sein, den kanonischen Pfad des angegebenen Dateinamens zurückgeben und alle symbolischen Links zu ihren Zielen auflösen. Aber es ist unter Windows kaputt.
Ich habe einen Patch für Python 3.2 erstellt, um diesen Fehler zu beheben, und habe ihn hochgeladen unter:
http://bugs.python.org/issue9949
Es behebt die Funktion realpath()
in Python32\Lib\ntpath.py
.
Ich habe es auch auf meinen Server gestellt, hier:
http://www.burtonsys.com/ntpath_fix_issue9949.Zip
Leider ist der Fehler auch in Python 2.x vorhanden und ich kenne dort keine Korrektur.
http://docs.python.org/library/os.path.html#os.path.abspath
auch joinpath und normpath, abhängig davon, ob Sie sich im aktuellen Arbeitsverzeichnis befinden oder mit anderen Dingen arbeiten. normpath könnte für Sie direkter sein.
Aktualisieren:
speziell:
os.path.normpath(
os.path.join(
os.path.dirname( '/etc/fonts/conf.d/70-yes-bitmaps.conf' ),
os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf')
)
)
Die Dokumentation sagt, os.path.join()
zu verwenden:
Das Ergebnis kann entweder ein absoluter oder ein relativer Pfadname sein. Wenn es relativ ist, kann es mit
os.path.join(os.path.dirname(path), result)
in einen absoluten Pfadnamen umgewandelt werden.
In Windows 10, Python 3.5, os.readlink("C:\\Users\PP")
, wo "C:\Users\PP" ein symbolischer Link (kein Junction-Link) ist.
Es gibt den absoluten Pfad zum Verzeichnis zurück.
Dies funktioniert auch auf Ubuntu 16.04, Python 3.5.
Ich empfehle die Verwendung von pathlib
library für Dateisystemvorgänge.
import pathlib
x = pathlib.Path('lol/lol/path)
x.resolve()
Documentation für Path.resolve(strict=False)
: Den Pfad absolut machen und alle Symlinks auflösen. Ein neues Pfadobjekt wird zurückgegeben.