Pythonda işləyən bir skript faylının yerini (yolunu) əldə etmək üçün __file__ istifadə edin. Bu, işləyən faylın yerləşdiyi yerə əsasən digər faylları yükləmək üçün faydalıdır.
Python 3.8 -ə qədər, __file__, python əmrini (və ya bəzi mühitlərdə python3 əmrini) yerinə yetirərkən göstərilən yolu qaytarır. Nisbi yol göstərildikdə nisbi yol qaytarılır; mütləq yol göstərilsə, mütləq yol qaytarılır.
Python 3.9 və sonrakı versiyalarda, mütləq yol, iş zamanı göstərilən yoldan asılı olmayaraq qaytarılır.
Aşağıdakı məzmun izah olunur.
os.getcwd()
,__file__
- Hal -hazırda icra olunan faylın fayl adını və kataloq adını alın.
- İcra olunan faylın mütləq yolunu əldə edin.
- Hazırda icra olunan faylın yerləşdiyi yerə əsaslanaraq digər faylları oxuyur.
- Cari qovluğu icra olunan faylın qovluğuna köçürün.
- Eyni işləmə, iş vaxtında mövcud kataloqdan asılı olmayaraq edilə bilər.
Mövcud qovluğu (iş kataloqu) əldə etmək və dəyişdirmək haqqında məlumat üçün aşağıdakı məqaləyə baxın.
- Əlaqəli məqalələr:Pythonda mövcud qovluğu əldə edin və dəyişdirin (köçürün)
Qeyd edək ki, __file__ Jupyter Notebook -da (.ipynb) istifadə edilə bilməz.
Jupyter Notebook -un başladığı qovluqdan asılı olmayaraq .ipynb -in yerləşdiyi qovluq indiki qovluq kimi icra olunacaq.
Cari qovluğu dəyişdirmək üçün kodda os.chdir () istifadə etmək mümkündür.
- os.getcwd () və __file__.
- Hal -hazırda icra olunan faylın fayl adını və kataloq adını alın.
- İcra olunan faylın mütləq yolunu əldə edin.
- Hazırda icra olunan faylın yerləşdiyi yerə əsaslanaraq digər faylları oxuyur.
- Cari qovluğu icra olunan faylın qovluğuna köçürün.
- Eyni işləmə, iş vaxtında mövcud kataloqdan asılı olmayaraq edilə bilər.
os.getcwd () və __file__.
Windows -da cari qovluğu yoxlamaq üçün pwd yerinə dir əmrindən istifadə edə bilərsiniz.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
Aşağıdakı məzmunu (data \ src) olan Python skript faylı (file_path.py) yaradın.
import os
print('getcwd: ', os.getcwd())
print('__file__: ', __file__)
Skript faylının yolunu göstərən python əmrini (və ya bəzi mühitlərdə python3 əmrini) işlədin.
python3 data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: data/src/file_path.py
Cari qovluğa gedən yol mütləq os.getcwd () ilə əldə edilə bilər. Python3 əmri ilə göstərilən yolu əldə etmək üçün __file__ istifadə edə bilərsiniz.
Python 3.8 -ə qədər, __file__, python (və ya python3) əmrində göstərilən yolu ehtiva edir. Yuxarıdakı nümunədə nisbi yol nisbi olduğu üçün qaytarılır, amma mütləq olduğu halda mütləq yol qaytarılır.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
python3 /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
Python 3.9 və daha sonra, python (və ya python3) əmrində göstərilən yoldan asılı olmayaraq, mütləq yolu __file__ -ə qaytarır.
Aşağıdakı nümunədə kodu Python 3.7 -də eyni skript faylına (file_path.py) əlavə edəcəyik və yuxarıdakı qovluğa nisbətən işlədəcəyik.
Python 3.7 -də mütləq yol istifadə olunur. Nəticələr bu hissənin sonunda göstərilir.
Hal -hazırda icra olunan faylın fayl adını və kataloq adını alın.
Çalışan faylın fayl adını və kataloq adını almaq üçün standart kitabxananın os.path modulunda aşağıdakı funksiyanı istifadə edin.
os.path.basename()
os.path.dirname()
print('basename: ', os.path.basename(__file__))
print('dirname: ', os.path.dirname(__file__))
İcra nəticəsi.
# basename: file_path.py
# dirname: data/src
İcra olunan faylın mütləq yolunu əldə edin.
Nisbi bir yol __file__ ilə əldə edilərsə, os.path.abspath () ilə mütləq bir yola çevrilə bilər. Kataloqlar mütləq yollar olaraq da əldə edilə bilər.
print('abspath: ', os.path.abspath(__file__))
print('abs dirname: ', os.path.dirname(os.path.abspath(__file__)))
İcra nəticəsi.
# abspath: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# abs dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
Os.path.abspath () -də mütləq bir yol göstərilsə, olduğu kimi qaytarılacaq. Buna görə, __file__ mütləq bir yoldursa, aşağıdakılar xətaya səbəb olmaz.
os.path.abspath(__file__)
Hazırda icra olunan faylın yerləşdiyi yerə əsaslanaraq digər faylları oxuyur.
İcra olunan faylın yerinə (yoluna) görə digər faylları oxumaq istəyirsinizsə, os.path.join () istifadə edərək aşağıdakı iki fayla qoşulun.
- İcra olunan faylın kataloqu
- Çalışan fayldan oxunacaq fayla nisbi yol.
Çalışdığınız faylla eyni qovluqdakı bir faylı oxumaq istəyirsinizsə, sadəcə fayl adını birləşdirin.
print('[set target path 1]')
target_path_1 = os.path.join(os.path.dirname(__file__), 'target_1.txt')
print('target_path_1: ', target_path_1)
print('read target file:')
with open(target_path_1) as f:
print(f.read())
İcra nəticəsi.
# [set target path 1]
# target_path_1: data/src/target_1.txt
# read target file:
# !! This is "target_1.txt" !!
Üst səviyyə “. \” İlə təmsil olunur. Olduğu kimi buraxa bilərsiniz, ancaq yolu normallaşdırmaq və əlavə “. \” Və digər simvolları silmək üçün os.path.normpath () istifadə edə bilərsiniz.
print('[set target path 2]')
target_path_2 = os.path.join(os.path.dirname(__file__), '../dst/target_2.txt')
print('target_path_2: ', target_path_2)
print('normalize : ', os.path.normpath(target_path_2))
print('read target file:')
with open(target_path_2) as f:
print(f.read())
İcra nəticəsi.
# [set target path 2]
# target_path_2: data/src/../dst/target_2.txt
# normalize : data/dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
Cari qovluğu icra olunan faylın qovluğuna köçürün.
Cari qovluğu skriptdə icra olunan faylın qovluğuna köçürmək üçün os.chdir () istifadə edin.
- Əlaqəli məqalələr:Pythonda mövcud qovluğu əldə edin və dəyişdirin (köçürün)
Bunun os.getcwd () ilə köçürüldüyünü görə bilərsiniz.
print('[change directory]')
os.chdir(os.path.dirname(os.path.abspath(__file__)))
print('getcwd: ', os.getcwd())
İcra nəticəsi.
# [change directory]
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
Cari qovluq köçürüldükdən sonra, faylı oxuyarkən onu işləyən faylın qovluğu ilə birləşdirməyə ehtiyac yoxdur. Çalışan faylın qovluğuna nisbətən yolu göstərə bilərsiniz.
print('[set target path 1 (after chdir)]')
target_path_1 = 'target_1.txt'
print('target_path_1: ', target_path_1)
print('read target file:')
with open(target_path_1) as f:
print(f.read())
print()
print('[set target path 2 (after chdir)]')
target_path_2 = '../dst/target_2.txt'
print('target_path_2: ', target_path_2)
print('read target file:')
with open(target_path_2) as f:
print(f.read())
İcra nəticəsi.
# [set target path 1 (after chdir)]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2 (after chdir)]
# target_path_2: ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
Eyni işləmə, iş vaxtında mövcud kataloqdan asılı olmayaraq edilə bilər.
Göstərdiyimiz kimi, aşağıdakı metodlardan birini istifadə edərək faylları iş vaxtında mövcud qovluqdan asılı olmayaraq skript faylının yerləşdiyi yerə əsasən yükləmək mümkündür.
- Os.path.join () istifadə edərək işləyən faylın qovluğunu və işləyən fayldan oxunacaq faylın nisbi yolunu birləşdirin.
- Cari qovluğu icra olunan faylın qovluğuna köçürün.
Cari qovluğu köçürmək daha asandır, amma təbii ki, bundan sonra daha çox fayl oxumaq və ya yazmaq istəyirsinizsə, cari kataloqun köçürüldüyünü nəzərə almalısınız.
Əvvəlki nümunələrin nəticələri aşağıda ümumiləşdirilmişdir.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
python3 data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: data/src/file_path.py
# basename: file_path.py
# dirname: data/src
# abspath: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# abs dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1]
# target_path_1: data/src/target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2]
# target_path_2: data/src/../dst/target_2.txt
# normalize : data/dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
#
# [change directory]
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1 (after chdir)]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2 (after chdir)]
# target_path_2: ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
Mütləq yolu göstərməyin nəticəsi belədir.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
python3 /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# basename: file_path.py
# dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
# abspath: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# abs dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1]
# target_path_1: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2]
# target_path_2: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/../dst/target_2.txt
# normalize : /Users/mbp/Documents/my-project/python-snippets/notebook/data/dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
#
# [change directory]
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1 (after chdir)]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2 (after chdir)]
# target_path_2: ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
Terminaldakı cari qovluğu köçürmənin və eyni skript faylının icra edilməsinin nəticəsi aşağıda göstərilmişdir. Fərqli bir yerdən icra edilsə də eyni faylın oxuna biləcəyini görə bilərsiniz.
cd data/src
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
python3 file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
# __file__: file_path.py
# basename: file_path.py
# dirname:
# abspath: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src/file_path.py
# abs dirname: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2]
# target_path_2: ../dst/target_2.txt
# normalize : ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!
#
# [change directory]
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook/data/src
#
# [set target path 1 (after chdir)]
# target_path_1: target_1.txt
# read target file:
# !! This is "target_1.txt" !!
#
# [set target path 2 (after chdir)]
# target_path_2: ../dst/target_2.txt
# read target file:
# !! This is "target_2.txt" !!