ازگر میں چلنے والی اسکرپٹ فائل کا مقام (راستہ) حاصل کرنے کے لیے ، __file__ استعمال کریں۔ یہ چلنے والی فائل کے مقام کی بنیاد پر دوسری فائلوں کو لوڈ کرنے کے لیے مفید ہے۔
ازگر 3.8 تک ، __file__ ازگر کمانڈ (یا کچھ ماحول میں python3 کمانڈ) پر عمل کرتے وقت مخصوص راستہ لوٹاتا ہے۔ اگر کوئی رشتہ دار راستہ متعین کیا جاتا ہے تو ، رشتہ دار راستہ لوٹا دیا جاتا ہے۔ اگر مطلق راستہ متعین کیا جاتا ہے تو مطلق راستہ لوٹا دیا جاتا ہے۔
ازگر 3.9 اور بعد میں ، رن ٹائم پر متعین راستے سے قطع نظر مطلق راستہ لوٹا دیا جاتا ہے۔
مندرجہ ذیل مندرجات کی وضاحت کی گئی ہے۔
os.getcwd()،__file__- فی الحال چلنے والی فائل کی فائل کا نام اور ڈائریکٹری کا نام حاصل کریں۔
- عملدرآمد ہونے والی فائل کا مطلق راستہ حاصل کریں۔
- فی الحال چلانے والی فائل کے مقام کی بنیاد پر دوسری فائلیں پڑھتی ہیں۔
- موجودہ ڈائریکٹری کو فائل کی ڈائرکٹری میں منتقل کریں۔
- رن ٹائم پر موجودہ ڈائریکٹری سے قطع نظر وہی پروسیسنگ کی جا سکتی ہے۔
موجودہ ڈائریکٹری (ورکنگ ڈائرکٹری) کو حاصل کرنے اور تبدیل کرنے کے بارے میں معلومات کے لیے درج ذیل مضمون ملاحظہ کریں۔
نوٹ کریں کہ __file__ Jupyter نوٹ بک (.ipynb) میں استعمال نہیں کیا جا سکتا۔
ڈائریکٹری جہاں .ipynb واقع ہے موجودہ ڈائریکٹری کے طور پر عمل میں لایا جائے گا ، قطع نظر اس ڈائریکٹری کے جہاں Jupyter نوٹ بک شروع کی گئی ہے۔
موجودہ ڈائریکٹری کو تبدیل کرنے کے لیے کوڈ میں os.chdir () استعمال کرنا ممکن ہے۔
- os.getcwd () اور __file__.
- فی الحال چلنے والی فائل کی فائل کا نام اور ڈائریکٹری کا نام حاصل کریں۔
- عملدرآمد ہونے والی فائل کا مطلق راستہ حاصل کریں۔
- فی الحال چلانے والی فائل کے مقام کی بنیاد پر دوسری فائلیں پڑھتی ہیں۔
- موجودہ ڈائریکٹری کو فائل کی ڈائرکٹری میں منتقل کریں۔
- رن ٹائم پر موجودہ ڈائریکٹری سے قطع نظر وہی پروسیسنگ کی جا سکتی ہے۔
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__ ازگر (یا 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 اور بعد میں __file__ کو مطلق راستہ لوٹاتا ہے ، قطع نظر اس کے کہ ازگر (یا python3) کمانڈ میں بتائے گئے راستے سے قطع نظر۔
مندرجہ ذیل مثال میں ، ہم ازگر 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" !!


