os.path.realpath
membedakan tautan simbolis pada sistem operasi yang mendukungnya.
os.path.abspath
cukup menghapus hal-hal seperti .
dan ..
dari jalur yang memberikan jalur lengkap dari akar pohon direktori ke file bernama (atau symlink)
Misalnya, di 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'
Symlinks dapat berisi jalur relatif, karenanya perlu menggunakan keduanya. Panggilan batin ke realpath
mungkin mengembalikan jalur dengan ..
bagian yang disematkan , yang abspath
kemudian dihapus.
realpath()
can berisi..
komponen dan tidak benar-benar menjawab pertanyaan mengapa Anda akan menggunakan keduanya; Jawaban jobrad lebih akurat.abspath
masih mengikuti symlink jika direktori saat ini adalah symlink. Saya hanya menemukan jawaban stackoverflow.com/questions/54665065/… ini untuk menghentikan perilaku ini.Untuk skenario yang Anda nyatakan, tidak ada alasan untuk menggabungkan realpath dan abspath, karena
os.path.realpath
sebenarnya memanggilos.path.abspath
sebelum mengembalikan hasil (saya memeriksa Python 2.5 ke Python 3.6).os.path.abspath
mengembalikan jalur absolut, tetapi TIDAK menyelesaikan symlink dalam argumennya.os.path.realpath
pertama-tama akan menyelesaikan semua tautan simbolis di jalur, dan kemudian mengembalikan jalur absolut.Namun, jika Anda mengharapkan jalur berisi a
~
, baik abspath atau realpath tidak akan menyelesaikan~
direktori beranda pengguna, dan jalur yang dihasilkan tidak valid . Anda perlu menggunakanos.path.expanduser
untuk menyelesaikan ini ke direktori pengguna.Demi penjelasan lengkap, berikut adalah beberapa hasil yang telah saya verifikasi di Windows dan Linux, dengan Python 3.4 dan Python 2.6. Direktori saat ini (
./
) adalah direktori home saya, yang terlihat seperti ini:sumber
os.path.realpath(os.path.expanduser('~/subdir/../data'))
Dalam istilah awam, jika Anda mencoba mendapatkan jalur file pintasan, jalur absolut memberikan jalur lengkap dari file yang ada di lokasi pintasan , sedangkan realpath memberikan jalur lokasi asli dari file tersebut.
Path absolut, os.path.abspath (), memberikan path lengkap dari file yang terletak di direktori kerja saat ini atau direktori yang Anda sebutkan.
Path nyata, os.path.realpath (), memberikan path lengkap dari file yang dirujuk.
Misalnya:
sumber