Python ရှိ run file တစ်ခု၏တည်နေရာ (လမ်းကြောင်း) ကိုရယူခြင်း။

စီးပွားရေးလုပ်ငန်း

Python ရှိ script script တစ်ခု၏တည်နေရာ (လမ်းကြောင်း) ကိုရယူရန် __file__ ကိုသုံးပါ။ ၎င်းသည်အလုပ်လုပ်နေသောဖိုင်၏တည်နေရာပေါ် မူတည်၍ အခြားဖိုင်များကိုတင်ရာတွင်အသုံးဝင်သည်။

Python 3.8 အထိ၊ __ file__ သည် python command (သို့မဟုတ်ပတ်ဝန်းကျင်အချို့တွင် python3 command ကိုလုပ်ဆောင်သောအခါ) သတ်မှတ်ထားသောလမ်းကြောင်းကိုပြန်ပေးသည်။ ဆွေမျိုးလမ်းကြောင်းကိုသတ်မှတ်လျှင်ဆွေမျိုးလမ်းကြောင်းပြန်ပေးသည်။ အကြွင်းမဲ့အာဏာလမ်းကြောင်းကိုသတ်မှတ်လျှင်အကြွင်းမဲ့လမ်းကြောင်းပြန်ရလိမ့်မည်။

Python 3.9 နှင့်နောက်ပိုင်းတွင် runtime တွင်သတ်မှတ်ထားသည့်လမ်းကြောင်းနှင့်မသက်ဆိုင်ဘဲအကြွင်းမဲ့လမ်းကြောင်းကိုပြန်ပေးသည်။

အောက်ပါအကြောင်းအရာများကိုရှင်းပြထားပါသည်။

  • os.getcwd()ရ၊__file__
  • လက်ရှိလုပ်ဆောင်နေသောဖိုင်၏ဖိုင်နာမည်နှင့်လမ်းညွှန်အမည်ကိုရယူပါ။
  • ကွပ်မျက်ခံရသောဖိုင်၏အကြွင်းမဲ့လမ်းကြောင်းကိုရယူပါ။
  • လက်ရှိလုပ်ဆောင်နေသောဖိုင်၏တည်နေရာပေါ် မူတည်၍ အခြားဖိုင်များကိုဖတ်သည်။
  • လက်ရှိ directory ကိုကွပ်မျက်ခံရသောဖိုင်၏ directory သို့ရွှေ့ပါ။
  • runtime တွင်လက်ရှိ directory အားမခွဲခြားဘဲတူညီသောလုပ်ဆောင်ခြင်းကိုလုပ်ဆောင်နိုင်သည်။

လက်ရှိလမ်းညွှန် (အလုပ်လမ်းညွှန်) ကိုရယူခြင်းနှင့်ပြောင်းလဲခြင်းဆိုင်ရာအချက်အလက်များအတွက်အောက်ပါဆောင်းပါးကိုကြည့်ပါ။

__file__ ကို Jupyter Notebook (.ipynb) တွင် သုံး၍ မရပါကိုသတိပြုပါ။
.ipynb တည်ရှိသော directory ကို Jupyter Notebook စတင်ခဲ့သည့် directory မွာလက်ရှိ directory အဖြစ်ဆောင်ရွက်လိမ့်မည်။
လက်ရှိလမ်းညွှန်ကိုပြောင်းရန်ကုဒ်တွင် os.chdir () ကိုသုံးနိုင်သည်။

os.getcwd () နှင့် __file__

Windows တွင်၊ သင်လက်ရှိလမ်းညွှန်ကိုစစ်ဆေးရန် pwd အစား dir command ကိုသုံးနိုင်သည်။

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

Python script file (file_path.py) ကိုအောက်အဆင့် (data \ src) တွင်ဖန်တီးပါ။

import os

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

script file သို့လမ်းကြောင်းသတ်မှတ်ခြင်းအတွက် python command (သို့မဟုတ် python3 command) ကို run ပါ။

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

လက်ရှိလမ်းကြောင်းသို့အကြွင်းမဲ့လမ်းကြောင်းကို os.getcwd () ဖြင့်ရယူနိုင်သည်။ python3 command ဖြင့်သတ်မှတ်ထားသောလမ်းကြောင်းကိုရယူရန် __file__ ကိုလည်းသုံးနိုင်သည်။

Python 3.8 အထိ __ file__ တွင် python (သို့မဟုတ် python3) command တွင်သတ်မှတ်ထားသောလမ်းကြောင်းပါ ၀ င်လိမ့်မည်။ အထက်ပါဥပမာတွင်ဆွေမျိုးလမ်းကြောင်းသည်ဆွေမျိုးဖြစ်သောကြောင့်ပြန်သွားသည်၊ သို့သော်အကြွင်းမဲ့လမ်းကြောင်းကိုပြန်ရောက်သည်။

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 3.9 နှင့်နောက်ပိုင်းတွင် python (သို့မဟုတ် python3) command တွင်ဖော်ပြထားသည့်လမ်းကြောင်းမခွဲခြားဘဲအကြွင်းမဲ့လမ်းကြောင်းကို __file__ သို့ပြန်ပေးသည်။

အောက်ပါဥပမာတွင် Python 3.7 ၌တူညီသော script file (file_path.py) သို့ code ကိုထည့်ပြီး၎င်းကိုအထက်ပါ directory နှင့်နှိုင်းယှဉ်ပါ။

Python 3.7 တွင်အကြွင်းမဲ့လမ်းကြောင်းကိုအသုံးပြုသည်။ ရလဒ်များကိုဤအပိုင်း၏အဆုံးတွင်ပြထားသည်။

လက်ရှိလုပ်ဆောင်နေသောဖိုင်၏ဖိုင်နာမည်နှင့်လမ်းညွှန်အမည်ကိုရယူပါ။

ပုံမှန်ဖိုင်လ်၏ os.path module တွင်အောက်ပါ function ကိုသုံးပါ။

  • 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 () ကို သုံး၍ အောက်ပါဖိုင်နှစ်ခုကိုပေါင်းပါ။

  • လုပ်ဆောင်နေသောဖိုင်၏လမ်းညွှန်
  • နှိုင်းရလမ်းကြောင်းမှဖိုင်ကိုအပြေးဖိုင်မှဖတ်ပါ။

သင် run နေသည့်ဖိုင်၏ directory တစ်ခုတည်း၌ဖိုင်တစ်ခုကိုဖတ်လိုလျှင်ဖိုင်နာမည်ကိုတွဲရေးပါ။

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

လက်ရှိ directory ကိုကွပ်မျက်ခံရသောဖိုင်၏ directory သို့ရွှေ့ပါ။

os.chdir () ကို သုံး၍ လက်ရှိ directory ကို script တွင်လုပ်ဆောင်နေသောဖိုင်၏ directory သို့ရွှေ့ပါ။

၎င်းကို 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

လက်ရှိ directory ကိုရွှေ့ပြီးတာနဲ့ဖိုင်ကိုဖတ်နေတဲ့အခါ run နေတဲ့ directory နဲ့တွဲရေးဖို့မလိုပါဘူး။ သင်အလုပ်လုပ်နေသောဖိုင်၏လမ်းကြောင်းနှင့်နှိုင်းယှဉ်သည့်လမ်းကြောင်းကိုသင်သတ်မှတ်နိုင်သည်။

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

runtime တွင်လက်ရှိ directory အားမခွဲခြားဘဲတူညီသောလုပ်ဆောင်ခြင်းကိုလုပ်ဆောင်နိုင်သည်။

ကျွန်ုပ်တို့ပြသသည့်အတိုင်း၊ အောက်ပါနည်းလမ်းများထဲမှတစ်ခုကို သုံး၍ runtime တွင်လက်ရှိ directory မှမလွတ်ဘဲ script file ၏တည်နေရာပေါ် မူတည်၍ ဖိုင်များကိုတင်နိုင်သည်။

  • os.path.join () ကို သုံး၍ run နေဖိုင်မှဖတ်ရမည့်ဖိုင်၏လမ်းကြောင်းနှင့်ဆွေမျိုးလမ်းကြောင်းကိုပေါင်းစည်းပါ။
  • လက်ရှိ directory ကိုကွပ်မျက်ခံရသောဖိုင်၏ directory သို့ရွှေ့ပါ။

လက်ရှိ directory ကိုရွှေ့ရတာပိုလွယ်တယ်၊ ဒါပေမယ့်မင်းဖိုင်တွေကိုပိုဖတ်ချင်၊ ရေးချင်တယ်ဆိုရင်၊ လက်ရှိ directory ကိုရွှေ့လိုက်ပြီဆိုတာမင်းထည့်စဉ်းစားဖို့လိုလိမ့်မယ်။

ယခင်ဥပမာများ၏ရလဒ်များကိုအောက်တွင်အကျဉ်းချုပ်ဖော်ပြထားသည်။

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

terminal ၌လက်ရှိ directory ကိုရွှေ့။ script script တစ်ခုတည်းကိုလုပ်ဆောင်ခြင်း၏ရလဒ်ကိုအောက်တွင်ပြထားသည်။ မတူညီတဲ့နေရာတစ်ခုကနေကွပ်မျက်ရင်တောင်တူညီတဲ့ဖိုင်ကိုဖတ်နိုင်တယ်ဆိုတာသင်မြင်နိုင်ပါတယ်။

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