os.path.dirname (__ ফাইল__) খালি ফিরে আসে


164

আমি বর্তমান ডিরেক্টরিটির পথ পেতে চাই যার অধীনে একটি .py ফাইল কার্যকর করা হয়।

উদাহরণস্বরূপ D:\test.pyকোড সহ একটি সহজ ফাইল :

import os

print os.getcwd()
print os.path.basename(__file__)
print os.path.abspath(__file__)
print os.path.dirname(__file__)

এটি আশ্চর্যের বিষয় যে আউটপুটটি হ'ল:

D:\
test.py
D:\test.py
EMPTY

আমি getcwd()এবং এর কাছ থেকে একই ফলাফল আশা করছি path.dirname()

দেওয়া হয়েছে os.path.abspath = os.path.dirname + os.path.basename, কেন

os.path.dirname(__file__)

খালি ফিরবে?

উত্তর:


255

কারণ os.path.abspath = os.path.dirname + os.path.basenameধরে না। আমাদের বরং আছে

os.path.dirname(filename) + os.path.basename(filename) == filename

উভয় dirname()এবং basename()কেবল বর্তমান ডিরেক্টরিটি বিবেচনা না করেই পাস করা ফাইলের নামগুলি উপাদানগুলিতে বিভক্ত করে। আপনি যদি বর্তমান ডিরেক্টরিটিও বিবেচনা করতে চান তবে আপনাকে এগুলি স্পষ্টভাবে করতে হবে।

পরম পাথের ডায়ারনেম পেতে, ব্যবহার করুন

os.path.dirname(os.path.abspath(__file__))

3
হাই সোভেন, আপনি ঠিক বলেছেন, এটি os.path.dirname (os.path.abspath ( ফাইল )) হওয়া উচিত । ধন্যবাদ! শুধু এফওয়াইআই, আপনি শেষ লাইনে একটি ছোট টাইপ পেয়েছেন।
স্তরে বিভক্ত হত্তয়া

11
নোট করুন উপরের মন্তব্যে একটি সাহস রয়েছে যেখানে মার্কডাউন ফর্ম্যাটিংয়ের কারণে উভয় দিকে আন্ডারলাইন হওয়া উচিত। আসল উত্তরটি সঠিকভাবে পরিবর্তিত হয়েছিল
ওয়াটসোনিক

1
নোট করুন যে আমাদের কখনই নেই os.path.dirname(filename) + os.path.basename(filename) == filenameকারণ ডিরেক্টরি বিভাজকটি অনুপস্থিত। আমাদের পরিবর্তে রয়েছে:os.path.join(os.path.dirname(filename), os.path.basename(filename)) == filename
জিন পল

আমি বিভ্রান্ত, আপনি কি আপনার প্রোগ্রামের ভিত্তিক = os.path.abspath (os.path.dirname ( ফাইল )) রেখে দেবেন ? বা আপনি কী প্রতিস্থাপন করবেন বা আপনার পথটি সি: \ ব্যবহারকারীদের \ পরীক্ষা \ app.db এর মতো প্রতিস্থাপন করবেন?
0004

@ pes04 __file__বর্তমান ফাইলটির নামে প্রসারিত হয়, যাতে আপনি এই উত্তরটি থেকে কোডটির একটি ভারব্যাটিম কপি ব্যবহার করতে পারেন।
সোভেন মারনাচ


6
os.path.split(os.path.realpath(__file__))[0]

os.path.realpath(__file__)বর্তমান স্ক্রিপ্টের abspath ফেরত; os.path.split (abspath) [0] বর্তমান দিরকে ফিরিয়ে দিন



আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.