પાયથોનમાં ચાલતી ફાઇલનું સ્થાન (પાથ) મેળવવું: __file__.

બિઝનેસ

પાયથોનમાં ચાલતી સ્ક્રિપ્ટ ફાઇલનું સ્થાન (પાથ) મેળવવા માટે, __file__ નો ઉપયોગ કરો. ચાલતી ફાઇલના સ્થાનના આધારે અન્ય ફાઇલોને લોડ કરવા માટે આ ઉપયોગી છે.

Python 3.8 સુધી, __file__ અજગર આદેશ (અથવા કેટલાક વાતાવરણમાં python3 આદેશ) ચલાવતી વખતે નિર્દિષ્ટ પાથ આપે છે. જો કોઈ સંબંધિત માર્ગ નિર્દિષ્ટ કરવામાં આવે, તો સંબંધિત માર્ગ પાછો આવે છે; જો નિરપેક્ષ માર્ગ નિર્દિષ્ટ કરવામાં આવે છે, તો નિરપેક્ષ માર્ગ પાછો આવે છે.

પાયથોન 3.9 અને પછીના સમયમાં, રનટાઇમ પર નિર્દિષ્ટ પાથને ધ્યાનમાં લીધા વગર સંપૂર્ણ પાથ પરત કરવામાં આવે છે.

નીચેની સામગ્રી સમજાવવામાં આવી છે.

  • os.getcwd(),__file__
  • હાલમાં કાર્યરત ફાઇલની ફાઇલ નામ અને ડિરેક્ટરી નામ મેળવો.
  • એક્ઝિક્યુટ કરવામાં આવી રહેલી ફાઇલનો સંપૂર્ણ માર્ગ મેળવો.
  • હાલમાં કાર્યરત ફાઇલના સ્થાનના આધારે અન્ય ફાઇલો વાંચે છે.
  • વર્તમાન ડિરેક્ટરીને એક્ઝિક્યુટ કરવામાં આવતી ફાઇલની ડિરેક્ટરીમાં ખસેડો.
  • રનટાઇમ પર વર્તમાન ડિરેક્ટરીને ધ્યાનમાં લીધા વગર સમાન પ્રક્રિયા કરી શકાય છે.

વર્તમાન ડિરેક્ટરી (વર્કિંગ ડિરેક્ટરી) મેળવવા અને બદલવા માટેની માહિતી માટે નીચેનો લેખ જુઓ.

નોંધ કરો કે __file__ નો ઉપયોગ Jupyter નોટબુક (.ipynb) માં કરી શકાતો નથી.
ડિરેક્ટરી જ્યાં .ipynb સ્થિત છે તે વર્તમાન ડિરેક્ટરી તરીકે ચલાવવામાં આવશે, ડિરેક્ટરીને ધ્યાનમાં લીધા વગર જ્યાં જ્યુપીટર નોટબુક શરૂ કરવામાં આવી છે.
વર્તમાન ડિરેક્ટરીને બદલવા માટે કોડમાં os.chdir () નો ઉપયોગ કરવો શક્ય છે.

os.getcwd () અને __file__.

વિન્ડોઝમાં, તમે વર્તમાન ડિરેક્ટરી તપાસવા માટે pwd ને બદલે dir આદેશનો ઉપયોગ કરી શકો છો.

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

નીચલા સ્તર (data \ src) માં નીચેના સમાવિષ્ટો સાથે Python સ્ક્રિપ્ટ ફાઇલ (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__ નો ઉપયોગ પણ કરી શકો છો.

Python 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

Python (અથવા python3) આદેશમાં નિર્દિષ્ટ પાથને ધ્યાનમાં લીધા વગર, Python 3.9 અને પાછળથી __file__ પર સંપૂર્ણ પાથ આપે છે.

નીચેના ઉદાહરણમાં, અમે Python 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" !!