1. ホーム
  2. python

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

2022-07-30 02:54:09

質問

複数のオープンソース・プロジェクトで、私は人々が 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'

Symlinkは相対パスを含むことができるため、両方を使用する必要があります。の内部呼び出しは realpath の内部呼び出しは .. の部分があり、その abspath が削除されます。