আমি বর্তমানে চলমান পাইথন স্ক্রিপ্টের মতো একই কমান্ড ব্যবহার করে ফাইলগুলি খুলতাম
open("Some file.txt", "r")
যাইহোক, আমি আবিষ্কার করেছি যে স্ক্রিপ্টটি যখন ডাবল ক্লিক করে উইন্ডোজে চালিত হয় তখন এটি ভুল ডিরেক্টরি থেকে ফাইলটি খোলার চেষ্টা করবে।
সেই থেকে আমি ফর্মটির একটি কমান্ড ব্যবহার করেছি
open(os.path.join(sys.path[0], "Some file.txt"), "r")
যখনই আমি কোনও ফাইল খুলতে চাইতাম। এটি আমার নির্দিষ্ট ব্যবহারের জন্য কাজ করে তবে আমি নিশ্চিত নই যে sys.path[0]অন্য কোনও ব্যবহারের ক্ষেত্রেও এটি ব্যর্থ হতে পারে।
সুতরাং আমার প্রশ্নটি: বর্তমানে চলমান পাইথন স্ক্রিপ্টের একই ডিরেক্টরিতে থাকা কোনও ফাইল খোলার সর্বোত্তম এবং নির্ভরযোগ্য উপায় কোনটি?
আমি এখন অবধি বুঝতে সক্ষম হয়েছি এখানে এখানে:
os.getcwd()এবংos.path.abspath('')"বর্তমান ওয়ার্কিং ডিরেক্টরি" ফিরিয়ে দিন, স্ক্রিপ্ট ডিরেক্টরি নয়।os.path.dirname(sys.argv[0])এবংos.path.dirname(__file__)স্ক্রিপ্টটি কল করার জন্য ব্যবহৃত পথটি ফিরে আসুন, যা আপেক্ষিক বা এমনকি ফাঁকা হতে পারে (যদি স্ক্রিপ্টটি সিডব্লিউডে থাকে)। এছাড়াও,__file__যখন স্ক্রিপ্টটি IDLE বা পাইথনওয়িনে চালিত হয় তখন উপস্থিত থাকে না।sys.path[0]এবংos.path.abspath(os.path.dirname(sys.argv[0]))স্ক্রিপ্ট ডিরেক্টরি ফিরে বলে মনে হচ্ছে। আমি নিশ্চিত না যে এই দুটিয়ের মধ্যে কোনও পার্থক্য আছে কিনা।
সম্পাদনা:
আমি কেবল বুঝতে পেরেছি যে আমি যা করতে চাই তার আরও ভালভাবে বর্ণনা করা হবে "সমেত মডিউলযুক্ত একই ডিরেক্টরিতে একটি ফাইল খুলুন"। অন্য কথায়, আমি যদি কোনও মডিউল আমদানি করি তবে আমি লিখেছিলাম যে এটি অন্য ডিরেক্টরিতে রয়েছে এবং সেই মডিউলটি একটি ফাইল খুলবে, আমি মডিউলটির ডিরেক্টরিতে ফাইলটি সন্ধান করতে চাই। আমি মনে করি না যে আমি কিছু পেয়েছি তা করতে সক্ষম ...
__file__ব্যবহার না করা যায় তবে তারsys.argv[0]পরিবর্তে ব্যবহার করুনdirname(__file__)। বাকিদের প্রত্যাশা অনুযায়ী কাজ করা উচিত। আমি__file__লাইব্রেরি কোডে ব্যবহার করা পছন্দ করি ,sys.argv[0]সম্ভবত আপনার কোডটির দিকে নির্দেশ নাও করতে পারে, বিশেষত যদি কোনও তৃতীয় পক্ষের স্ক্রিপ্টের মাধ্যমে আমদানি করা হয়।