Di Python, perintah apa yang bisa saya gunakan untuk menemukan:
Untuk mendapatkan full path ke direktori file Python yang terkandung dalam, menulis ini di file tersebut:
import os
dir_path = os.path.dirname(os.path.realpath(__file__))
(Perhatikan bahwa mantra di atas tidak't bekerja jika anda've sudah digunakan os.chdir()
untuk mengubah direktori kerja anda saat ini, karena nilai __file__
konstan relatif ke direktori kerja saat ini dan tidak berubah oleh os.chdir()
panggilan.)
Untuk mendapatkan direktori kerja saat ini menggunakan
import os
cwd = os.getcwd()
Dokumentasi referensi untuk modul, konstanta dan fungsi-fungsi yang digunakan di atas:
os
dan os.jalan
modul.
Ini - __file__
konstanos.jalan.realpath(path)
(kembali "kanonik jalur yang ditentukan filename, menghilangkan link simbolik yang ditemui di jalan")os.jalan.dirname(path)
(kembali "nama direktori dari path path
")os.getcwd()
(kembali "sebuah string yang mewakili direktori kerja saat ini")os.chdir(path)
("mengubah direktori kerja saat ini untuk path
")Direktori Kerja saat ini: os.getcwd()
Dan __file__
atribut dapat membantu anda mencari tahu di mana file anda mengeksekusi berada. Ini JADI post menjelaskan semuanya: https://stackoverflow.com/questions/2632199/how-do-i-get-the-path-of-the-current-executed-file-in-python
Anda mungkin menemukan ini berguna sebagai referensi:
import os
print("Path at terminal when executing this file")
print(os.getcwd() + "\n")
print("This file path, relative to os.getcwd()")
print(__file__ + "\n")
print("This file full path (following symlinks)")
full_path = os.path.realpath(__file__)
print(full_path + "\n")
print("This file directory and name")
path, filename = os.path.split(full_path)
print(path + ' --> ' + filename + "\n")
print("This file directory only")
print(os.path.dirname(full_path))
pathlib
modul, diperkenalkan di Python 3.4 (PEP 428 — The pathlib modul — berorientasi objek filesystem jalan), membuat jalan yang berhubungan dengan pengalaman yang jauh lebih baik.
$ pwd
/home/skovorodkin/stack
$ tree
.
└── scripts
├── 1.py
└── 2.py
Dalam rangka untuk mendapatkan direktori kerja saat ini menggunakan Path.cwd()
:
from pathlib import Path
print(Path.cwd()) # /home/skovorodkin/stack
Untuk mendapatkan path absolut ke file script, gunakan Path.menyelesaikan()
metode:
print(Path(__file__).resolve()) # /home/skovorodkin/stack/scripts/1.py
Dan untuk mendapatkan path dari direktori tempat script anda berada, mengakses .orang tua
(dianjurkan untuk memanggil .menyelesaikan()
sebelum .orang tua
):
print(Path(__file__).resolve().parent) # /home/skovorodkin/stack/scripts
Ingat bahwa __file__
adalah tidak dapat diandalkan dalam beberapa situasi: Bagaimana saya mendapatkan jalan yang saat ini dijalankan file di Python?.
Harap dicatat, bahwa Path.cwd()
, Path.menyelesaikan()
dan Path
metode jalur kembali benda-benda (PosixPath
dalam kasus saya), bukan string. Di Python 3.4 dan 3.5 yang menyebabkan beberapa rasa sakit, karena open
fungsi built-in yang hanya bisa bekerja dengan string atau byte benda-benda, dan tidak mendukung Path
benda-benda, sehingga anda harus mengkonversi Path
objek string atau gunakan Path.open()
metode, tapi pilihan terakhir yang diperlukan untuk mengubah kode lama:
$ cat scripts/2.py
from pathlib import Path
p = Path(__file__).resolve()
with p.open() as f: pass
with open(str(p)) as f: pass
with open(p) as f: pass
print('OK')
$ python3.5 scripts/2.py
Traceback (most recent call last):
File "scripts/2.py", line 11, in <module>
with open(p) as f:
TypeError: invalid file: PosixPath('/home/skovorodkin/stack/scripts/2.py')
Seperti yang anda lihat terbuka(p)
tidak bekerja dengan Python 3.5.
PEP 519 — Menambahkan file sistem jalan protokol, dilaksanakan di Python 3.6, menambahkan dukungan dari PathLike
benda-benda ke open
fungsi, jadi sekarang anda dapat melewati Jalan
benda-benda terbuka
fungsi langsung:
$ python3.6 scripts/2.py
OK
1.Untuk mendapatkan arus direktori full path
>>import os
>>print os.getcwd()
o/p:"C :\Users\admin\myfolder"
1.Untuk mendapatkan direktori saat ini nama folder sendiri
>>import os
>>str1=os.getcwd()
>>str2=str1.split('\\')
>>n=len(str2)
>>print str2[n-1]
o/p:"myfolder"
Jika anda're menggunakan Python 3.4, ada merek baru tingkat yang lebih tinggi pathlib
modul yang memungkinkan anda untuk dengan mudah memanggil pathlib.Jalan.cwd()
untuk mendapatkan Path
objek yang mewakili direktori kerja anda saat ini, bersama dengan banyak fitur baru lainnya.
Info lebih lanjut tentang ini API baru dapat ditemukan di sini.
Jawaban #1:
Jika anda ingin direktori saat ini, lakukan hal ini:
import os
os.getcwd()
Jika anda ingin sembarang nama folder dan anda memiliki path ke folder itu, lakukan hal ini:
def get_folder_name(folder):
'''
Returns the folder name, given a full folder path
'''
return folder.split(os.sep)[-1]
Jawaban #2:
import os
print os.path.abspath(__file__)
Untuk pertanyaan 1 menggunakan os.getcwd() # dapatkan kerja dir
dan os.chdir(r'D:\Steam\steamapps\common') # mengatur kerja dir
Saya sarankan menggunakan sys.argv[0]
untuk pertanyaan 2 karena sys.argv
adalah kekal dan karena itu selalu mengembalikan file saat ini (modul path objek) dan tidak terpengaruh oleh os.chdir()
. Anda juga dapat melakukannya seperti ini:
import os
this_py_file = os.path.realpath(__file__)
# vvv Below comes your code vvv #
tapi yang potongan dan sys.argv[0]
tidak akan bekerja atau akan bekerja aneh ketika disusun oleh PyInstaller karena sihir sifat yang tidak diatur dalam __main__
dan tingkat sys.argv[0]
adalah cara anda exe disebut (berarti bahwa itu menjadi terpengaruh oleh kerja dir).