A = os.path.join(os.path.dirname(__file__), '..')
B = os.path.dirname(os.path.realpath(__file__))
C = os.path.abspath(os.path.dirname(__file__))
Saya biasanya hanya hardwire ini dengan jalan yang sebenarnya. Tapi ada alasan untuk pernyataan ini yang menentukan path saat runtime, dan saya benar-benar ingin memahami modul os.path sehingga saya bisa mulai menggunakannya.
__file__
TIDAK didefinisikan dalam semua kasus, misalnya modul C yang terhubung secara statis. Kami tidak dapat mengandalkan__file__
selalu tersedia.name '__file__' is not defined
.__file__
adalah pathname dari file dari mana modul dimuat, jika itu diambil dari file. Ini berarti__file__
hanya akan berfungsi bila Anda menjalankannya sebagai skrip yang bukan dalam bahasa juru bahasa. (Kecuali jika Anda mengimpornya dalam bahasa juru bahasa ...)Saya hanya ingin mengatasi beberapa kebingungan terlebih dahulu.
__file__
bukan wildcard itu adalah atribut. Atribut garis bawah ganda dan metode dianggap "istimewa" oleh konvensi dan melayani tujuan khusus.http://docs.python.org/reference/datamodel.html menunjukkan banyak metode dan atribut khusus, jika tidak semuanya.
Dalam hal ini
__file__
adalah atribut modul (objek modul). Dalam Python.py
file adalah modul. Jadiimport amodule
akan memiliki atribut__file__
yang artinya berbeda dalam keadaan yang berbeda.Diambil dari dokumen:
Dalam kasus Anda, modul mengaksesnya sendiri
__file__
atributnya di namespace global.Untuk melihat ini dalam aksi coba:
Dan lari:
sumber
Per dokumentasi :
dan juga :
sumber
Menggunakan
__file__
dikombinasikan dengan berbagaios.path
modul memungkinkan semua jalur relatif lokasi direktori modul saat ini. Ini memungkinkan modul / proyek Anda menjadi portabel untuk mesin lain.Dalam proyek Anda, Anda melakukannya:
dan kemudian mencoba untuk menyebarkannya ke server Anda dengan direktori penyebaran seperti
/home/web/mydevproject/
maka kode Anda tidak akan dapat menemukan jalur dengan benar.sumber