73

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

..を、シンボリック リンクまたはソフト リンク ファイルの親ディレクトリの実際のフル パスに置き換える方法。

4

6 に答える 6

136
os.path.realpath(path)

os.path.realpathは、指定されたファイル名の標準パスを返し、パスで検出されたシンボリック リンクを削除します。

于 2010-07-10T20:46:40.073 に答える
17

unutbu が言うようos.path.realpath(path)に、指定されたファイル名の正規パスを返し、ターゲットへのシンボリック リンクを解決するのが正しい答えであるはずです。しかし、Windows では壊れています。

このバグを修正するために Python 3.2 用のパッチを作成し、次の場所にアップロードしました。

http://bugs.python.org/issue9949

realpath()の機能を修正しますPython32\Lib\ntpath.py

また、ここにあるサーバーにも配置しました。

http://www.burtonsys.com/ntpath_fix_issue9949.zip

残念ながら、このバグは Python 2.x にも存在しており、私はそこに修正が加えられていないことを知っています。

于 2012-03-10T01:38:34.560 に答える
12

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') 
  ) 
)
于 2010-07-10T20:39:02.270 に答える