1. ホーム
  2. python

[解決済み] なぜ os.path.abspath と os.path.realpath の両方を使用するのでしょうか?

2022-02-16 03:05:26

質問

複数のオープンソースプロジェクトで、次のようなことを行っているのを見たことがあります。 os.path.abspath(os.path.realpath(__file__)) を使用して、現在のファイルへの絶対パスを取得します。

しかし、私は os.path.abspath(__file__)os.path.realpath(__file__) は同じ結果になります。 os.path.abspath(os.path.realpath(__file__)) は少し冗長なようです。

何か理由があるのでしょうか?

解決方法は?

os.path.realpath は、シンボリックリンクをサポートしているオペレーティングシステム上で、シンボリックリンクを削除します。

os.path.abspath のようなものを削除するだけです。 ... ディレクトリツリーのルートから指定されたファイル(またはシンボリックリンク)までのフルパスを与えるパスから

例えば、Ubuntuの場合

$ ls -l
total 0
-rw-rw-r-- 1 guest guest 0 Jun 16 08:36 a
lrwxrwxrwx 1 guest guest 1 Jun 16 08:36 b -> a

$ python
Python 2.7.11 (default, Dec 15 2015, 16:46:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.

>>> from os.path import abspath, realpath

>>> abspath('b')
'/home/guest/play/paths/b'

>>> realpath('b')
'/home/guest/play/paths/a'

シムリンクは相対パスを含むことができるため、両方を使用する必要があります。の内部呼び出しは realpath が埋め込まれたパスを返すかもしれません。 .. の部分があり、それが abspath を削除します。