पाइथन मा एक चलिरहेको फाइल को स्थान (पथ) प्राप्त गर्दै: __file__।

व्यापार

पाइथन मा एक चलिरहेको स्क्रिप्ट फाइल को स्थान (पथ) प्राप्त गर्न को लागी, __file__ को उपयोग गर्नुहोस्। यो चलिरहेको फाइल को स्थान मा आधारित अन्य फाइलहरु लोड गर्न को लागी उपयोगी छ।

पाइथन ३.8 सम्म, __file__ पाइथन कमाण्ड (वा केहि वातावरणमा python3 कमाण्ड) को कार्यान्वयन गर्दा निर्दिष्ट मार्ग फर्काउँछ। यदि एक सापेक्ष मार्ग निर्दिष्ट गरिएको छ, सापेक्ष मार्ग फर्काइएको छ; यदि एक निरपेक्ष मार्ग निर्दिष्ट गरिएको छ, निरपेक्ष मार्ग फर्काइएको छ।

पाइथन ३.9 र पछि, निरपेक्ष मार्ग रनटाइम मा निर्दिष्ट मार्ग को बावजूद फिर्ता आउँछ।

निम्न सामग्रीहरु व्याख्या गरीएको छ।

  • os.getcwd(),__file__
  • फाइल को नाम र वर्तमान मा कार्यान्वयन फाइल को निर्देशिका नाम प्राप्त गर्नुहोस्।
  • निष्पादित फाइल को निरपेक्ष मार्ग पाउनुहोस्।
  • हाल कार्यान्वयन गर्ने फाइल को स्थान मा आधारित अन्य फाइलहरु पढ्छ।
  • हालको डाइरेक्टरी निष्पादित फाइल को निर्देशिका मा सार्नुहोस्।
  • एउटै प्रशोधन रनटाइम मा वर्तमान निर्देशिका को बावजूद गर्न सकिन्छ।

प्राप्त गर्न र वर्तमान निर्देशिका (कार्य निर्देशिका) परिवर्तन गर्न को लागी जानकारी को लागी निम्न लेख हेर्नुहोस्।

ध्यान दिनुहोस् कि __file__ Jupyter नोटबुक (.ipynb) मा प्रयोग गर्न सकिदैन।
निर्देशिका जहाँ .ipynb अवस्थित छ वर्तमान निर्देशिका को रूप मा निष्पादित गरिनेछ, निर्देशिका को बावजूद जहाँ Jupyter नोटबुक शुरू गरीएको छ।
यो सम्भव छ 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__)

स्क्रिप्ट फाइल को लागी पथ निर्दिष्ट गरेर python आदेश (वा केहि वातावरण मा 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__ को उपयोग गर्न सक्नुहुन्छ।

पाइथन ३.8 सम्म, __file__ मा पाइथन (वा 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

अजगर ३.9 र पछि __file__ को निरपेक्ष मार्ग फिर्ता, अजगर (वा python3) आदेश मा निर्दिष्ट मार्ग को बावजूद।

निम्न उदाहरण मा, हामी पायथन ३.7 मा एउटै स्क्रिप्ट फाइल (file_path.py) मा कोड जोड्नेछौं र माथिको डाइरेक्टरी को सापेक्ष चलाउनेछौं।

पाइथन ३.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