पायथनमध्ये चालणाऱ्या फाईलचे स्थान (मार्ग) मिळवणे: __file__.

व्यवसाय

पायथनमध्ये चालणाऱ्या स्क्रिप्ट फाईलचे स्थान (मार्ग) मिळवण्यासाठी, __file__ वापरा. चालू असलेल्या फाईलच्या स्थानावर आधारित इतर फायली लोड करण्यासाठी हे उपयुक्त आहे.

पायथन 3.8 पर्यंत, __file__ पायथन कमांड (किंवा काही वातावरणात python3 कमांड) कार्यान्वित करताना निर्दिष्ट केलेला मार्ग परत करतो. जर सापेक्ष मार्ग निर्दिष्ट केला असेल तर सापेक्ष मार्ग परत केला जातो; जर परिपूर्ण मार्ग निर्दिष्ट केला असेल तर परिपूर्ण मार्ग परत केला जातो.

पायथन 3.9 मध्ये आणि नंतर, रनटाइमच्या वेळी निर्दिष्ट केलेल्या मार्गाची पर्वा न करता परिपूर्ण मार्ग परत केला जातो.

खालील सामग्री स्पष्ट केली आहे.

  • os.getcwd(),__file__
  • सध्या कार्यान्वित केलेल्या फाईलचे फाइल नाव आणि डिरेक्टरी नाव मिळवा.
  • फाईल कार्यान्वित केल्याचा परिपूर्ण मार्ग मिळवा.
  • सध्या कार्यान्वित केलेल्या फाईलच्या स्थानावर आधारित इतर फाइल्स वाचतो.
  • कार्यान्वित केलेल्या फाईलच्या निर्देशिकेत वर्तमान निर्देशिका हलवा.
  • रनटाइमच्या वेळी वर्तमान निर्देशिका विचारात न घेता समान प्रक्रिया केली जाऊ शकते.

वर्तमान निर्देशिका (वर्किंग डिरेक्टरी) मिळवणे आणि बदलणे यावरील माहितीसाठी खालील लेख पहा.

लक्षात घ्या की __file__ ज्युपिटर नोटबुक (.ipynb) मध्ये वापरता येत नाही.
जेथे .ipynb स्थित आहे ती निर्देशिका वर्तमान निर्देशिका म्हणून कार्यान्वित केली जाईल, ज्यूपिटर नोटबुक कुठे सुरू केली आहे त्याकडे दुर्लक्ष करून.
वर्तमान निर्देशिका बदलण्यासाठी कोडमध्ये os.chdir () वापरणे शक्य आहे.

os.getcwd () आणि __file__.

विंडोजमध्ये, आपण वर्तमान निर्देशिका तपासण्यासाठी pwd ऐवजी dir कमांड वापरू शकता.

pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook

खालच्या स्तरावर (data \ src) खालील सामग्रीसह पायथन स्क्रिप्ट फाइल (file_path.py) तयार करा.

import os

print('getcwd:      ', os.getcwd())
print('__file__:    ', __file__)

स्क्रिप्ट फाईलचा मार्ग निर्दिष्ट करून पायथन कमांड (किंवा काही वातावरणात python3 कमांड) चालवा.

python3 data/src/file_path.py
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__:     data/src/file_path.py

वर्तमान निर्देशिकेचा परिपूर्ण मार्ग os.getcwd () सह मिळवता येतो. Python3 आदेशाने निर्दिष्ट केलेला मार्ग मिळवण्यासाठी तुम्ही __file__ देखील वापरू शकता.

पायथन 3.8 पर्यंत, __file__ मध्ये python (किंवा python3) कमांड मध्ये निर्दिष्ट मार्ग असेल. वरील उदाहरणात, सापेक्ष मार्ग परत केला आहे कारण तो सापेक्ष आहे, परंतु परिपूर्ण मार्ग निरपेक्ष असल्यास परत केला जातो.

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

पायथन 3.9 आणि नंतर python (किंवा python3) कमांड मध्ये निर्दिष्ट केलेल्या मार्गाची पर्वा न करता, __file__ ला पूर्ण मार्ग परत करते.

खालील उदाहरणात, आम्ही पायथन 3.7 मधील समान स्क्रिप्ट फाइल (file_path.py) मध्ये कोड जोडू आणि वरील निर्देशिकेच्या तुलनेत ते चालवू.

पायथन 3.7 मध्ये, परिपूर्ण मार्ग वापरला जातो. परिणाम या विभागाच्या शेवटी दर्शविले आहेत.

सध्या कार्यान्वित केलेल्या फाईलचे फाइल नाव आणि डिरेक्टरी नाव मिळवा.

फाईलचे नाव आणि चालू असलेल्या फाईलचे डिरेक्टरी नाव मिळवण्यासाठी, मानक लायब्ररीच्या os.path मॉड्यूलमध्ये खालील फंक्शन वापरा.

  • os.path.basename()
  • os.path.dirname()
print('basename:    ', os.path.basename(__file__))
print('dirname:     ', os.path.dirname(__file__))

अंमलबजावणी परिणाम.

# basename:     file_path.py
# dirname:      data/src

फाईल कार्यान्वित केल्याचा परिपूर्ण मार्ग मिळवा.

जर __file__ सह सापेक्ष मार्ग प्राप्त झाला, तर तो os.path.abspath () सह परिपूर्ण मार्गामध्ये रूपांतरित केला जाऊ शकतो. निर्देशिका देखील परिपूर्ण मार्ग म्हणून मिळवता येतात.

print('abspath:     ', os.path.abspath(__file__))
print('abs dirname: ', os.path.dirname(os.path.abspath(__file__)))

अंमलबजावणी परिणाम.

# 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 () मध्ये निर्दिष्ट केला असेल तर तो पूर्वीप्रमाणे परत केला जाईल. म्हणून, जर __file__ हा निरपेक्ष मार्ग असेल तर खालील त्रुटी निर्माण करणार नाही.

  • os.path.abspath(__file__)

सध्या कार्यान्वित केलेल्या फाईलच्या स्थानावर आधारित इतर फाइल्स वाचतो.

आपण कार्यान्वित केलेल्या फाईलच्या स्थान (पथ) वर आधारित इतर फायली वाचू इच्छित असल्यास, os.path.join () वापरून खालील दोन फायलींमध्ये सामील व्हा.

  • फाईल कार्यान्वित केल्याची निर्देशिका
  • चालू असलेल्या फाईलमधून वाचल्या जाणाऱ्या फाईलचा सापेक्ष मार्ग.

आपण ज्या फाईल चालवत आहात त्याच डिरेक्टरीमध्ये एखादी फाइल वाचायची असेल तर फक्त फाईलचे नाव जोडा.

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())

अंमलबजावणी परिणाम.

# [set target path 1]
# target_path_1:  data/src/target_1.txt
# read target file:
# !! This is "target_1.txt" !!

वरचा स्तर “.” द्वारे दर्शविला जातो. आपण ते जसे आहे तसे सोडू शकता, परंतु आपण मार्ग सामान्य करण्यासाठी os.path.normpath () वापरू शकता आणि अतिरिक्त “. \” आणि इतर वर्ण काढू शकता.

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())

अंमलबजावणी परिणाम.

# [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" !!

कार्यान्वित केलेल्या फाईलच्या निर्देशिकेत वर्तमान निर्देशिका हलवा.

स्क्रिप्टमध्ये कार्यान्वित केलेल्या फाईलच्या निर्देशिकेत वर्तमान निर्देशिका हलविण्यासाठी os.chdir () वापरा.

तुम्ही पाहू शकता की ते os.getcwd () ने हलवले आहे.

print('[change directory]')
os.chdir(os.path.dirname(os.path.abspath(__file__)))
print('getcwd:      ', os.getcwd())

अंमलबजावणी परिणाम.

# [change directory]
# getcwd:       /Users/mbp/Documents/my-project/python-snippets/notebook/data/src

एकदा वर्तमान निर्देशिका हलवली गेली की, फाइल वाचताना चालू असलेल्या फाईलच्या निर्देशिकेसह ती जोडण्याची गरज नाही. आपण फक्त चालू असलेल्या फाईलच्या निर्देशिकेशी संबंधित मार्ग निर्दिष्ट करू शकता.

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())

अंमलबजावणी परिणाम.

# [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" !!

रनटाइमच्या वेळी वर्तमान निर्देशिका विचारात न घेता समान प्रक्रिया केली जाऊ शकते.

आम्ही दाखवल्याप्रमाणे, खालील पद्धतींपैकी एक वापरून, स्क्रिप्ट फाइलच्या स्थानाच्या आधारावर, रनटाइमच्या वेळी वर्तमान निर्देशिकेपासून स्वतंत्रपणे फाइल लोड करणे शक्य आहे.

  • Os.path.join () वापरून चालू असलेल्या फाईलमधून वाचल्या जाणाऱ्या फाईलची डिरेक्टरी आणि फाईलचा सापेक्ष मार्ग एकत्र करा.
  • कार्यान्वित केलेल्या फाईलच्या निर्देशिकेत वर्तमान निर्देशिका हलवा.

वर्तमान निर्देशिका हलविणे सोपे आहे, परंतु नक्कीच, जर तुम्हाला त्या नंतर अधिक फायली वाचू किंवा लिहायच्या असतील तर तुम्हाला वर्तमान निर्देशिका हलवली गेली आहे हे लक्षात घेणे आवश्यक आहे.

मागील उदाहरणांचे परिणाम खाली सारांशित केले आहेत.

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" !!

परिपूर्ण मार्ग निर्दिष्ट करण्याचा परिणाम खालीलप्रमाणे आहे.

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" !!

टर्मिनलमध्ये वर्तमान निर्देशिका हलवण्याचा आणि समान स्क्रिप्ट फाइल कार्यान्वित करण्याचा परिणाम खाली दर्शविला आहे. आपण पाहू शकता की तीच फाईल वेगळ्या ठिकाणाहून कार्यान्वित केली तरीही वाचली जाऊ शकते.

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" !!

Copied title and URL