আমি কীভাবে বর্তমান ফাইলের ডিরেক্টরিটির সম্পূর্ণ পথ পাব?


799

আমি বর্তমান ফাইলের ডিরেক্টরি পথ পেতে চাই। আমি চেষ্টা করেছিলাম:

>>> os.path.abspath(__file__)
'C:\\python27\\test.py'

তবে আমি কীভাবে ডিরেক্টরিটির পথটি পুনরুদ্ধার করতে পারি?

উদাহরণ স্বরূপ:

'C:\\python27\\'


5
__file__যখন আপনি অজগরটি একটি ইন্টারেক্টিভ শেল হিসাবে চালাবেন তখন তা সংজ্ঞায়িত হয় না। আপনার প্রশ্নের NameErrorকোডটির প্রথম অংশটি মনে হচ্ছে এটি একটি ইন্টারেক্টিভ শেল থেকে এসেছে তবে এটি আসলে কমপক্ষে পাইথন ২.7.৩ এ একটি উত্পাদন করবে , তবে অন্যরাও আমার ধারণা।
ড্রিভিকো

উত্তর:


1628

পাইথন ঘ

স্ক্রিপ্ট পরিচালনার জন্য:

import pathlib
pathlib.Path(__file__).parent.absolute()

বর্তমান ওয়ার্কিং ডিরেক্টরি জন্য:

import pathlib
pathlib.Path().absolute()

পাইথন 2 এবং 3

স্ক্রিপ্ট পরিচালনার জন্য:

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

আপনি যদি বর্তমান চলমান ডিরেক্টরিটি বোঝাতে চান:

import os
os.path.abspath(os.getcwd())

মনে রাখবেন যে আগে এবং পরে fileদুটি আন্ডারস্কোর হয়, কেবল একটি নয়।

এছাড়াও মনে রাখবেন যে আপনি যদি ইন্টারেক্টিভভাবে চলতে থাকেন বা কোনও ফাইল (যেমন: একটি ডাটাবেস বা অনলাইন সংস্থান) ব্যতীত অন্য কোনও কোড থেকে কোড লোড করা থাকে __file__, "বর্তমান ফাইল" এর কোনও ধারণা না থাকায় সেট সেট নাও করা যেতে পারে। উপরের উত্তরটি একটি ফাইলে থাকা অজগর স্ক্রিপ্টটি চালানোর সর্বাধিক সাধারণ দৃশ্যধারণ করে।

তথ্যসূত্র

  1. পাইথন ডকুমেন্টেশনে প্যাথলিব
  2. os.path 2.7 , os.path 3.8
  3. os.getcwd 2.7 , os.getcwd 3.8
  4. __file__ পরিবর্তনশীল এর অর্থ / কী?

43
abspath () বাধ্যতামূলক আপনি যদি উইন্ডোতে অদ্ভুত আচরণগুলি আবিষ্কার করতে না চান, যেখানে dirname ( ফাইল ) খালি স্ট্রিং ফিরে আসতে পারে!
sorin

4
os.path.dirname হওয়া উচিত (os.path.abspath (os .__ file__))?
ডারবেইলি

5
@ ড্রিবাইলি: না, অ্যাক্টিভ পাইথন সম্পর্কে বিশেষ কিছু নেই। __file__(দ্রষ্টব্য যে এটি শব্দের উভয় পাশে দুটি আন্ডারস্কোর) অজগরটির একটি মানক অংশ। এটি সি-ভিত্তিক মডিউলগুলিতে উপলব্ধ নয়, উদাহরণস্বরূপ, তবে এটি সর্বদা পাইথন স্ক্রিপ্টে পাওয়া উচিত।
ব্রায়ান ওকলে

10
আমি সম্ভাব্য প্রতীকী লিঙ্কটি সমাধান করার জন্য অ্যাবস্পথের পরিবর্তে রিয়েলপথ ব্যবহার করার পরামর্শ দেব।
টিটিমো

12
@ সিএফ 2117: আপনি যদি এটি কোনও স্ক্রিপ্টে চালান তবে এটি কাজ করবে। __file__একটি ইন্টারেক্টিভ প্রম্পট থেকে চলমান হয় না । \
ব্রায়ান ওকলে 21

99

ব্যবহার Pathপাইথন 3 থেকে প্রস্তাবিত উপায় হয়:

from pathlib import Path
print("File      Path:", Path(__file__).absolute())
print("Directory Path:", Path().absolute())  

ডকুমেন্টেশন: প্যাথলিব

দ্রষ্টব্য: জুপিটার নোটবুক ব্যবহার করা হলে, __file__প্রত্যাশিত মানটি ফেরত দেয় না, তাই Path().absolute()ব্যবহার করতে হবে।


17
আমি কি ছিল Path(__file__).parentফোল্ডারের যে ফাইল ধারণকারী হয় পেতে
YellowPillow

এটি সঠিক @ ইয়েলোপিলো, Path(__file__)আপনাকে ফাইলটি দেয়। .parentআপনাকে উপরের এক স্তর অর্থাৎ সমেত ডিরেক্টরিটি দেয়। আপনার যতগুলি .parentডিরেক্টরি প্রয়োজন তে আপনি আরও এতে যোগ করতে পারেন ।
রন কালিয়ান

1
দুঃখিত, আমার এই পরিষ্কার করা উচিত ছিল, কিন্তু যদি Path().absolute()অবস্থিত কিছু মডিউলে উপস্থিত থাকে path/to/moduleএবং আপনি path/to/scriptতখন অবস্থিত কিছু স্ক্রিপ্ট থেকে মডিউলটি কল করছেনpath/to/scriptpath/to/module
ইয়েলোপিলো

1
@ ইয়েলোপিলো Path(__file__).cwd()আরও সুস্পষ্ট
চার্লস

1
Path(__file__)সর্বদা কাজ করে না, উদাহরণস্বরূপ, এটি জুপিটার নোটবুকে কাজ করে না। Path().absolute()সমস্যা সমাধান করে।
রন কালিয়ান

43

পাইথন 3.x এ আমি করি:

from pathlib import Path

path = Path(__file__).parent.absolute()

ব্যাখ্যা:

  • Path(__file__) বর্তমান ফাইলের পথ।
  • .parentফাইলটি যে ডিরেক্টরিটিতে রয়েছে তা আপনাকে দেয় ।
  • .absolute()আপনাকে এর সম্পূর্ণ পরম পথ দেয় ।

pathlibপাথের সাথে কাজ করার আধুনিক উপায়টি ব্যবহার করা। আপনার যদি কোনও কারণে পরে স্ট্রিং হিসাবে এটি প্রয়োজন হয় তবে ঠিক করুন str(path)


3
এটি ২০১২ সালের হিসাবে গ্রহণযোগ্য উত্তর হওয়া উচিত the উত্তরে একটি জিনিস উল্লেখ করা যেতে পারে: যে কেউ অবিলম্বে .open()এই জাতীয় কোনও Pathবস্তুর সাথে কল করতে পারেwith Path(__file__).parent.joinpath('some_file.txt').open() as f:
স্টেফ্যান্ট

9
import os
print os.path.dirname(__file__)

21
দুঃখিত তবে এই উত্তরটি ভুল, সঠিকটি হ'ল ব্রায়ান-ডায়ারনেম (অ্যাবস্পথ ( ফাইল )) দ্বারা তৈরি। বিশদ জন্য মন্তব্য দেখুন।
sorin

1
এটি / আউটপুট হিসাবে দেবে
ত্রিপাঠি

2
@ সোরিন আসলে পাইথন ৩.6 এ তারা উভয়ই সমান
ডলারআক্ষয়ে

5

আপনি নিম্নলিখিত হিসাবে সহজেই ব্যবহার osএবং os.pathলাইব্রেরি করতে পারেন

import os
os.chdir(os.path.dirname(os.getcwd()))

os.path.dirnameবর্তমানের থেকে উচ্চ ডিরেক্টরিটি ফেরত দেয়। এটি আমাদের কোনও ফাইল আর্গুমেন্ট ছাড়াই এবং নিখুঁত পথ না জেনে একটি উচ্চ স্তরে পরিবর্তন করতে দেয়।


7
এটি বর্তমান ফাইলের ডিরেক্টরি দেয় না । এটি বর্তমানের কার্যক্ষম ডিরেক্টরিটির ডিরেক্টরিটি দেয় যা সম্পূর্ণ আলাদা হতে পারে। আপনি যে পরামর্শ দিচ্ছেন কেবলমাত্র যদি ফাইলটি বর্তমান কার্যক্ষম ডিরেক্টরিতে থাকে তবে তা কাজ করে।
ব্রায়ান ওকলে


2

আমি খুঁজে পেয়েছি নিম্নলিখিত কমান্ডগুলি সমস্ত পাইথন 3.6 স্ক্রিপ্টের মূল ডিরেক্টরিটির পুরো পথটি ফিরিয়ে দেবে।

পাইথন ৩.6 স্ক্রিপ্ট:

#!/usr/bin/env python3.6
# -*- coding: utf-8 -*-

from pathlib import Path

#Get the absolute path of a Python3.6 script
dir1 = Path().resolve()  #Make the path absolute, resolving any symlinks.
dir2 = Path().absolute() #See @RonKalian answer 
dir3 = Path(__file__).parent.absolute() #See @Arminius answer 

print(f'dir1={dir1}\ndir2={dir2}\ndir3={dir3}')

ব্যাখ্যা লিঙ্ক: .resolve () , .absolute () , পথ ( ফাইল ) .parent () পরম ()।


2

সিস্টেম: ম্যাকোস

সংস্করণ: পাইথন ৩. w ডাব্লু / অ্যানাকোন্ডা

import os

rootpath = os.getcwd()

os.chdir(rootpath)

1

পাইথনে কার্যকর পাঠের বৈশিষ্ট্য:

 from pathlib import Path

    #Returns the path of the directory, where your script file is placed
    mypath = Path().absolute()
    print('Absolute path : {}'.format(mypath))

    #if you want to go to any other file inside the subdirectories of the directory path got from above method
    filePath = mypath/'data'/'fuel_econ.csv'
    print('File path : {}'.format(filePath))

    #To check if file present in that directory or Not
    isfileExist = filePath.exists()
    print('isfileExist : {}'.format(isfileExist))

    #To check if the path is a directory or a File
    isadirectory = filePath.is_dir()
    print('isadirectory : {}'.format(isadirectory))

    #To get the extension of the file
    fileExtension = mypath/'data'/'fuel_econ.csv'
    print('File extension : {}'.format(filePath.suffix))

আউটপুট: আপনার পাইথন ফাইলটি যেখানে স্থান পেয়েছে তা নিখুঁত পাঠ P

পরম পথ: ডি: \ স্টাডি \ মেশিন লার্নিং up জুপিটার নোটবুক \ জ্যুপিটরনোটবুকটেষ্ট 2 \ উদাসিটি স্ক্রিপ্টস \ ম্যাটপ্ল্লোব এবং সামুদ্রিক অংশ 2

ফাইলের পথ: ডি: \ স্টাডি \ মেশিন লার্নিং up জুপিটার নোটবুক \ জুপিটারনোটবুক টেস্ট 2 \ উদাসিটি স্ক্রিপ্টস \ ম্যাটপ্ল্লোলিব এবং সামুদ্রিক অংশ 2 \ ডেটা \ ফুয়েল_সেকন.সিএসভি

isfileExist: সত্য

isadirectory: মিথ্যা

ফাইল এক্সটেনশন: .csv


1

আপনি যদি কেবলমাত্র বর্তমান ওয়ার্কিং ডিরেক্টরিটি দেখতে চান

import os
print(os.getcwd)

আপনি যদি বর্তমান ওয়ার্কিং ডিরেক্টরি পরিবর্তন করতে চান

os.chdir(path)

পাথটি সরানোর জন্য প্রয়োজনীয় পাথযুক্ত একটি স্ট্রিং। যেমন

path = "C:\\Users\\xyz\\Desktop\\move here"

0

IPython%pwdবর্তমান ওয়ার্কিং ডিরেক্টরি পেতে একটি ম্যাজিক কমান্ড রয়েছে । এটি নিম্নলিখিত উপায়ে ব্যবহার করা যেতে পারে:

from IPython.terminal.embed import InteractiveShellEmbed

ip_shell = InteractiveShellEmbed()

present_working_directory = ip_shell.magic("%pwd")

আইপিথনে জুপিটার নোটবুকটি %pwdসরাসরি নিম্নলিখিত হিসাবে ব্যবহার করা যেতে পারে:

present_working_directory = %pwd

5
প্রশ্ন আইপিথন সম্পর্কে নয়
কিরো

1
@ কিরো, আমার সমাধান আইপিথন ব্যবহার করে প্রশ্নের উত্তর দেয় । উদাহরণস্বরূপ, কেউ যদি একটি নতুন লাইব্রেরি ব্যবহার করে সমাধানের সাথে কোনও প্রশ্নের উত্তর দেয় তবে তাও ইমো এটি প্রশ্নের প্রাসঙ্গিক উত্তর হিসাবে রয়ে গেছে।
নাফিজ কুরাইশি

@ নাফিজকুরাইশি আপনার সমাধানটি একটি তৃতীয় পক্ষের লাইব্রেরি এবং এমন একটি শ্রেণীর সাথে পরিচয় করিয়ে দিয়েছে যা থেকে কাঙ্ক্ষিত ফলাফল অর্জনের জন্য আপনাকে ইনস্ট্যান্ট করতে হবে। নিজেই, এবং আমি মনে করি আরও অনেকগুলি বহিরাগত গ্রন্থাগারগুলি বিভিন্ন কারণে ব্যবহার এড়াতে চেষ্টা করে এবং অন্য কোনও কিছু যদি না কাজ করে তবে আমি কেবল আপনার সমাধানটি চেষ্টা করব। ভাগ্যক্রমে, কাঙ্ক্ষিত ফলাফল পেতে এবং কোনও বাহ্যিক গ্রন্থাগারের প্রয়োজন ছাড়াই আপনি ব্যবহার করতে পারেন এমন ফাংশনগুলিতে এমন একটি সিরিজ রয়েছে।
এলিওটওয়েসফ

@ elli0t, আংশিকভাবে একমত জুপিটার নোটবুক ব্যবহার করে এমন কারও বিবেচনা করুন যার জন্য এই প্রশ্নটি সম্ভবত% পিডব্লিউডি ম্যাজিক কমান্ড ব্যবহার করা ওএস আমদানির চেয়ে সহজ এবং পছন্দসই হবে।
নাফিজ কুরাইশি

0

প্ল্যাটফর্মগুলি (ম্যাকোস / উইন্ডোজ / লিনাক্স) জুড়ে মাইগ্রেশন ধারাবাহিকতা রাখতে, চেষ্টা করুন:

path = r'%s' % os.getcwd().replace('\\','/')

0

আমি বর্তমান ফোল্ডারটি পেতে সিজিআইতে আইআইএস এর অধীনে অজগর চালানোর সময় ব্যবহার করার জন্য একটি ফাংশন তৈরি করেছি:

import os 
   def getLocalFolder():
        path=str(os.path.dirname(os.path.abspath(__file__))).split('\\')
        return path[len(path)-1]

0

ধরে নেওয়া যাক আপনার নিম্নলিখিত ডিরেক্টরি কাঠামো রয়েছে: -

মুখ্য / ফোল্ড 1 ফোল্ড 2 ফোল্ড 3 ...

folders = glob.glob("main/fold*")

for fold in folders:
    abspath = os.path.dirname(os.path.abspath(fold))
    fullpath = os.path.join(abspath, sch)
    print(fullpath)

-1
## IMPORT MODULES
import os

## CALCULATE FILEPATH VARIABLE
filepath = os.path.abspath('') ## ~ os.getcwd()
## TEST TO MAKE SURE os.getcwd() is EQUIVALENT ALWAYS..
## ..OR DIFFERENT IN SOME CIRCUMSTANCES

2
বর্তমান ওয়ার্কিং ডিরেক্টরিটি বর্তমান ফাইলের ডিরেক্টরির মতো হতে পারে না। আপনার সলিউশনটি কেবল তখনই কাজ করবে যদি বর্তমান ওয়ার্কিং ডিরেক্টরিটি ডিরেক্টরিতে ফাইল ডিরেক্টরি হিসাবে একই থাকে। এটি বিকাশের সময় মোটামুটি সাধারণ হতে পারে তবে এটি মোতায়েন করা স্ক্রিপ্টের পক্ষে সাধারণত বিরল।
ব্রায়ান ওকলে

তথ্যের জন্য ধন্যবাদ। সম্ভাব্য প্রতিফলিত করার জন্য আমি আমার উত্তর আপডেট করেছি যে এগুলি একই ফাইলপথটি ফেরত দেওয়ার সমতুল্য নাও হতে পারে। এই কারণেই আমি "ইনক্রিমেন্টাল প্রোগ্রামিং", টেস্টিং, এবং প্রচুর মুদ্রণ () ফাংশন কলকে টেস্ট আউটপুট এবং / অথবা মানগুলির প্রতিটি ধাপে ফিরে আসে বলে কলিংয়ের দর্শনের সাথে সম্মতি জানাই। আমি আশা করি যে আমার কোডটি এখন os.path.abspath () বনাম os.getcwd () এর বাস্তবতার প্রতিফলন ঘটায় যেহেতু আমি সবকিছু জানার দাবি করি না। তবে আপনি দেখতে পাচ্ছেন যে আমি OS.getcwd () কে মূল সমাধান হিসাবে নয়, বরং মনে রাখার এবং চেক করার মতো কোডের একটি বিকল্প অংশ হিসাবে মন্তব্যগুলিতে রেখেছি।
জেরুজালেম প্রোগ্রামার

দ্রষ্টব্য আমি কাউকে অংশগ্রহণকারী যদি তাদের উত্তর সেন্সর এবং কাটা হতে যাচ্ছে থেকে সম্পাদিত ও আমার উত্তর সংখ্যাগরিষ্ঠ মুছে ফেলা যে আমি এখানে পোস্ট ... :( এই ধরনের নিরুৎসাহিত মানুষ মনে করি।
জেরুজালেম প্রোগ্রামার

1
আপনি একমাত্র ব্যক্তি যিনি এই উত্তরটি সম্পাদনা করেছেন। এছাড়াও, আপনার সম্পাদনাগুলি এখনও প্রশ্নের সঠিকভাবে উত্তর দেয় না। প্রশ্নটি বিশেষত ফাইলের ডিরেক্টরিতে যাওয়ার পথ সম্পর্কে জিজ্ঞাসা করছে এবং আপনার উত্তরে কেবলমাত্র বর্তমান ডিরেক্টরি পাওয়ার কথা বলা হয়েছে। এটি একটি সঠিক উত্তর নয়, যেহেতু বর্তমান ডিরেক্টরিটি প্রায়শই স্ক্রিপ্টের ডিরেক্টরিতে থাকে না একইরকম হয় This এটির কোনও যোগসূত্র নেই abspath
ব্রায়ান ওকলি

অবশ্যই আমি যে কোডটি ভাগ করেছি সেগুলি ডিরেক্টরি এবং / অথবা এমন ফাইল থেকে চালিত হয় যেখানে আপনি নিখুঁত ফাইলের পথটি জানতে চান। অবশ্যই এটি একটি সঠিক উত্তর। দয়া করে ট্রল হবেন না
জেরুজালেম প্রোগ্রামার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.