ls -l /etc/fonts/conf.d/70-yes-bitmaps.confを指定すると
_lrwxrwxrwx <snip> /etc/fonts/conf.d/70-yes-bitmaps.conf -> ../conf.avail/70-yes-bitmaps.conf
_
シンボリックリンクまたはソフトリンクの場合、Pythonでターゲットファイルのフル(絶対パス)を見つける方法、
私が使用する場合
os.readlink('/etc/fonts/conf.d/70-yes-bitmaps.conf')
出力する
_../conf.avail/70-yes-bitmaps.conf
_
しかし、私は相対パスではなく絶対パスが必要なので、私の希望する出力は、
_/etc/fonts/conf.avail/70-yes-bitmaps.conf
_
_..
_をシンボリックリンクまたはソフトリンクファイルの親ディレクトリの実際のフルパスで置き換える方法。
os.path.realpath(path)
os.path.realpath は、指定されたファイル名の正規のパスを返し、パス内で発生したシンボリックリンクを削除します。
Unutbuが言うように、os.path.realpath(path)
は正しい答えであり、指定されたファイル名の標準パスを返し、ターゲットへのシンボリックリンクを解決する必要があります。しかし、Windowsでは壊れています。
このバグを修正するためにPython 3.2のパッチを作成し、次の場所にアップロードしました。
http://bugs.python.org/issue9949
_Python32\Lib\ntpath.py
_のrealpath()
関数を修正します
また、サーバーに配置しました:
http://www.burtonsys.com/ntpath_fix_issue9949.Zip
残念ながら、バグはPython 2.xにも存在し、そこでの修正はありません。
http://docs.python.org/library/os.path.html#os.path.abspath
また、現在の作業ディレクトリにいるか、他の場所で作業しているかに応じて、joinpathとnormpathも使用します。 normpathの方がより直接的な場合があります。
更新:
具体的には:
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')
)
)
documentation はos.path.join()
を使用するように言っています:
結果は、絶対パス名でも相対パス名でもかまいません。相対の場合、
os.path.join(os.path.dirname(path), result)
を使用して絶対パス名に変換できます。
Windows 10では、python 3.5、os.readlink("C:\\Users\PP")
ここで、 "C:\ Users\PP"はシンボリックリンク(ジャンクションリンクではない)が機能します。
ディレクトリへの絶対パスを返します。
これはUbuntu 16.04で動作します。python 3.5も同様です。
ファイルシステム操作には pathlib
ライブラリを使用することをお勧めします。
_import pathlib
x = pathlib.Path('lol/lol/path')
x.resolve()
_
Documentationfor Path.resolve(strict=False)
:パスを絶対にし、シンボリックリンクを解決します。新しいパスオブジェクトが返されます。