পাইথনে একটি চলমান স্ক্রিপ্ট ফাইলের অবস্থান (পথ) পেতে, __file__ ব্যবহার করুন। এটি চলমান ফাইলের অবস্থানের উপর ভিত্তি করে অন্যান্য ফাইল লোড করার জন্য দরকারী।
পাইথন 3.8 পর্যন্ত, __file__ পাইথন কমান্ড (বা কিছু পরিবেশে python3 কমান্ড) চালানোর সময় নির্দিষ্ট পথ ফেরত দেয়। যদি একটি আপেক্ষিক পথ নির্দিষ্ট করা হয়, আপেক্ষিক পথটি ফেরত দেওয়া হয়; যদি একটি পরম পথ নির্দিষ্ট করা হয়, পরম পথটি ফেরত দেওয়া হয়।
পাইথন 9.9 এবং পরবর্তীতে, রানটাইম -এ নির্দিষ্ট পথ নির্বিশেষে পরম পথ ফিরিয়ে দেওয়া হয়।
নিম্নলিখিত বিষয়বস্তু ব্যাখ্যা করা হয়েছে।
os.getcwd()
,__file__
- বর্তমানে সম্পাদিত ফাইলের ফাইলের নাম এবং ডিরেক্টরি নাম পান।
- সম্পাদিত ফাইলটির পরম পথ পান।
- বর্তমানে সম্পাদিত ফাইলের অবস্থানের উপর ভিত্তি করে অন্যান্য ফাইলগুলি পড়ে।
- সম্পাদিত ফাইলটির ডিরেক্টরিতে বর্তমান ডিরেক্টরিটি সরান।
- রানটাইমের সময় বর্তমান ডিরেক্টরি নির্বিশেষে একই প্রক্রিয়াকরণ করা যেতে পারে।
বর্তমান ডাইরেক্টরি (ওয়ার্কিং ডাইরেক্টরি) পাওয়ার এবং পরিবর্তন করার জন্য নিম্নলিখিত নিবন্ধটি দেখুন।
- সম্পরকিত প্রবন্ধ:পাইথনে বর্তমান ডিরেক্টরিটি পান এবং পরিবর্তন করুন (সরান)
উল্লেখ্য যে __file__ জুপিটার নোটবুকে (.ipynb) ব্যবহার করা যাবে না।
ডাইরেক্টরি যেখানে .ipynb অবস্থিত, বর্তমান ডিরেক্টরী হিসাবে এক্সিকিউট করা হবে, নির্বিশেষে ডাইরেক্টরি যেখানে জুপিটার নোটবুক শুরু হয়েছে।
বর্তমান ডিরেক্টরি পরিবর্তন করতে কোডে 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__ এ পাইথন (বা পাইথন 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" !!