పైథాన్లో రన్నింగ్ స్క్రిప్ట్ ఫైల్ యొక్క లొకేషన్ (పాత్) పొందడానికి, __file__ ఉపయోగించండి. రన్నింగ్ ఫైల్ లొకేషన్ ఆధారంగా ఇతర ఫైల్లను లోడ్ చేయడానికి ఇది ఉపయోగపడుతుంది.
పైథాన్ 3.8 వరకు, __file__ పైథాన్ ఆదేశాన్ని అమలు చేసేటప్పుడు పేర్కొన్న మార్గాన్ని అందిస్తుంది (లేదా కొన్ని వాతావరణాలలో పైథాన్ 3 కమాండ్). సాపేక్ష మార్గం పేర్కొనబడితే, సాపేక్ష మార్గం తిరిగి ఇవ్వబడుతుంది; ఒక సంపూర్ణ మార్గం పేర్కొనబడితే, సంపూర్ణ మార్గం తిరిగి ఇవ్వబడుతుంది.
పైథాన్ 3.9 మరియు తరువాత, రన్టైమ్లో పేర్కొన్న పాత్తో సంబంధం లేకుండా సంపూర్ణ మార్గం తిరిగి వస్తుంది.
కింది విషయాలు వివరించబడ్డాయి.
os.getcwd()
,__file__
- ప్రస్తుతం అమలు చేస్తున్న ఫైల్ యొక్క ఫైల్ పేరు మరియు డైరెక్టరీ పేరు పొందండి.
- అమలు చేయబడిన ఫైల్ యొక్క సంపూర్ణ మార్గాన్ని పొందండి.
- ప్రస్తుతం అమలు చేస్తున్న ఫైల్ లొకేషన్ ఆధారంగా ఇతర ఫైల్స్ చదువుతుంది.
- అమలు చేస్తున్న ఫైల్ డైరెక్టరీకి ప్రస్తుత డైరెక్టరీని తరలించండి.
- రన్టైమ్లో ప్రస్తుత డైరెక్టరీతో సంబంధం లేకుండా అదే ప్రాసెసింగ్ చేయవచ్చు.
ప్రస్తుత డైరెక్టరీ (వర్కింగ్ డైరెక్టరీ) పొందడం మరియు మార్చడం గురించి సమాచారం కోసం కింది కథనాన్ని చూడండి.
జూపిటర్ నోట్బుక్ (.ipynb) లో __file__ ని ఉపయోగించలేమని గమనించండి.
జూపిటర్ నోట్బుక్ ప్రారంభించిన డైరెక్టరీతో సంబంధం లేకుండా .ipynb ఉన్న డైరెక్టరీ ప్రస్తుత డైరెక్టరీగా అమలు చేయబడుతుంది.
ప్రస్తుత డైరెక్టరీని మార్చడానికి కోడ్లో os.chdir () ను ఉపయోగించడం సాధ్యమవుతుంది.
- os.getcwd () మరియు __file__.
- ప్రస్తుతం అమలు చేస్తున్న ఫైల్ యొక్క ఫైల్ పేరు మరియు డైరెక్టరీ పేరు పొందండి.
- అమలు చేయబడిన ఫైల్ యొక్క సంపూర్ణ మార్గాన్ని పొందండి.
- ప్రస్తుతం అమలు చేస్తున్న ఫైల్ లొకేషన్ ఆధారంగా ఇతర ఫైల్స్ చదువుతుంది.
- అమలు చేస్తున్న ఫైల్ డైరెక్టరీకి ప్రస్తుత డైరెక్టరీని తరలించండి.
- రన్టైమ్లో ప్రస్తుత డైరెక్టరీతో సంబంధం లేకుండా అదే ప్రాసెసింగ్ చేయవచ్చు.
os.getcwd () మరియు __file__.
Windows లో, మీరు ప్రస్తుత డైరెక్టరీని తనిఖీ చేయడానికి pwd కి బదులుగా dir కమాండ్ను ఉపయోగించవచ్చు.
pwd
# /Users/mbp/Documents/my-project/python-snippets/notebook
కింది స్థాయిలో (డేటా \ src) కింది విషయాలతో ఒక పైథాన్ స్క్రిప్ట్ ఫైల్ (file_path.py) ని సృష్టించండి.
import os
print('getcwd: ', os.getcwd())
print('__file__: ', __file__)
స్క్రిప్ట్ ఫైల్కు మార్గం పేర్కొంటూ పైథాన్ ఆదేశాన్ని (లేదా కొన్ని పరిసరాలలో పైథాన్ 3 కమాండ్) అమలు చేయండి.
python3 data/src/file_path.py
# getcwd: /Users/mbp/Documents/my-project/python-snippets/notebook
# __file__: data/src/file_path.py
ప్రస్తుత డైరెక్టరీకి సంపూర్ణ మార్గం os.getcwd () తో పొందవచ్చు. పైథాన్ 3 ఆదేశం ద్వారా పేర్కొన్న మార్గాన్ని పొందడానికి మీరు __file__ ని కూడా ఉపయోగించవచ్చు.
పైథాన్ 3.8 వరకు, __file__ పైథాన్ (లేదా పైథాన్ 3) ఆదేశంలో పేర్కొన్న మార్గాన్ని కలిగి ఉంటుంది. పై ఉదాహరణలో, సాపేక్ష మార్గం తిరిగి వచ్చింది ఎందుకంటే అది సాపేక్షంగా ఉంటుంది, కానీ సంపూర్ణ మార్గం సంపూర్ణంగా ఉంటే తిరిగి వస్తుంది.
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 మరియు తరువాత పైథాన్ (లేదా పైథాన్ 3) ఆదేశంలో పేర్కొన్న మార్గంతో సంబంధం లేకుండా, __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" !!