मुझे वर्तमान फ़ाइल की निर्देशिका का पूर्ण पथ कैसे मिलेगा?


799

मैं वर्तमान फ़ाइल की निर्देशिका पथ प्राप्त करना चाहता हूं। मैंने कोशिश की:

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

लेकिन मैं निर्देशिका के मार्ग को कैसे पुनः प्राप्त कर सकता हूं?

उदाहरण के लिए:

'C:\\python27\\'


5
__file__जब आप एक इंटरैक्टिव शेल के रूप में अजगर को चलाते हैं, तो इसे परिभाषित नहीं किया जाता है। आपके प्रश्न में कोड का पहला टुकड़ा ऐसा लगता है कि यह एक इंटरेक्टिव शेल से है, लेकिन वास्तव NameErrorमें कम से कम 2.7.3 पर अजगर का उत्पादन करेगा , लेकिन दूसरों को भी मुझे लगता है।
ड्रेविको

जवाबों:


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
यदि आप खिड़कियों पर अजीब व्यवहार नहीं खोजना चाहते हैं, तो dsname ( फ़ाइल ) एक खाली स्ट्रिंग वापस कर सकता है अगर आप नहीं चाहते तो abspath () अनिवार्य है !
सोरिन

4
os.path.dirname (os.path.abspath (os .__ file__)) होना चाहिए?
DrBailey

5
@DrBailey: नहीं, ActivePython के बारे में कुछ खास नहीं है। __file__(ध्यान दें कि यह शब्द के दोनों ओर दो अंडरस्कोर है) अजगर का एक मानक हिस्सा है। यह सी-आधारित मॉड्यूल में उपलब्ध नहीं है, उदाहरण के लिए, लेकिन यह हमेशा एक अजगर स्क्रिप्ट में उपलब्ध होना चाहिए।
ब्रायन ओकली

10
मैं एक संभावित प्रतीकात्मक लिंक को हल करने के लिए एब्सपैथ के बजाय रियलपथ का उपयोग करने की सलाह दूंगा।
टीटीमो

12
@ cph2117: यह तभी काम करेगा जब आप इसे किसी स्क्रिप्ट में चलाएंगे। __file__इंटरेक्टिव प्रॉम्प्ट से चलने पर कोई बात नहीं है । \
ब्रायन ओकले

99

का उपयोग करते हुए Pathअजगर 3 के बाद से सुझाया गया तरीका है:

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

प्रलेखन: पाथलिब

नोट: यदि Jupyter नोटबुक का उपयोग कर रहे हैं __file__, तो अपेक्षित मूल्य वापस नहीं करता है, इसलिए Path().absolute()इसका उपयोग करना होगा।


17
मुझे उस Path(__file__).parentफ़ोल्डर को प्राप्त करने के लिए करना था जो फ़ाइल युक्त है
येलोपिलो

यह @YellowPillow सही है, Path(__file__)आपको फ़ाइल मिलती है। .parentआपको एक स्तर ऊपर मिलता है, जिसमें निर्देशिका शामिल है। आप .parentजितनी आवश्यकता हो उतनी निर्देशिकाओं में जाने के लिए और अधिक जोड़ सकते हैं ।
रॉन किलियन

1
क्षमा करें, मुझे यह स्पष्ट करना चाहिए था, लेकिन यदि Path().absolute()कुछ मॉड्यूल मौजूद है path/to/moduleऔर आप मॉड्यूल को उस समय स्थित कुछ स्क्रिप्ट से कॉल कर रहे हैं, path/to/scriptतो path/to/scriptइसके बजायpath/to/module
YellowPillow

1
@YellowPillow 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
यह 2019 तक स्वीकृत उत्तर होना चाहिए। उत्तर में एक बात का भी उल्लेख किया जा सकता है: किसी व्यक्ति को तुरंत .open()ऐसी Pathवस्तु पर कॉल किया जा सकता है जैसेwith Path(__file__).parent.joinpath('some_file.txt').open() as f:
stefanct

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

21
क्षमा करें, लेकिन यह उत्तर गलत है, सही ब्रायन `dirname (abspath ( फ़ाइल )) द्वारा बनाया गया है । विवरण के लिए टिप्पणियाँ देखें।
सोरिन

1
यह / आउटपुट के रूप में देगा
Tripathi29

2
@ सोरिन वास्तव में पायथन 3.6 पर वे दोनों समान हैं
डॉलरअक्षय

5

आप आसानी से osऔर os.pathपुस्तकालय का उपयोग कर सकते हैं

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

os.path.dirnameवर्तमान से ऊपरी निर्देशिका लौटाता है। यह हमें किसी भी फ़ाइल तर्क को पारित किए बिना और पूर्ण पथ को जाने बिना ऊपरी स्तर पर बदलने की सुविधा देता है।


7
यह वर्तमान फ़ाइल की निर्देशिका नहीं देता है । यह वर्तमान कामकाजी निर्देशिका की निर्देशिका देता है जो पूरी तरह से अलग हो सकती है। यदि आप केवल सुझाव देते हैं कि यदि फ़ाइल वर्तमान कार्यशील निर्देशिका में है तो काम करती है।
ब्रायन ओकले


2

मैंने पाया कि सभी कमांड्स पायथन 3.6 स्क्रिप्ट की मूल निर्देशिका का पूरा रास्ता वापस कर देंगे।

पायथन 3.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

सिस्टम: मैकओएस

संस्करण: पायथन 3.6 डब्ल्यू / एनाकोंडा

import os

rootpath = os.getcwd()

os.chdir(rootpath)

1

पायथन में USEFUL PATH PROPERTIES:

 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))

उत्पादन: ABS पथ्य वहाँ है, जहां आपका पायलेट आपके स्थान पर है

पूर्ण पथ: D: \ Study \ Machine Learning \ Jupitor नोटबुक \ JupytorNotebookTest2 \ Udacity_Scripts \ Matplotlib और seaborn Part2

फ़ाइल पथ: D: \ Study \ Machine Learning \ Jupitor नोटबुक \ JupytorNotebookTest2 \ Udacity_Scripts \ Matplotlib और seaborn Part2 \ data \ ईंधन_econ.csv

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

IPython Jupyter नोटबुक पर %pwdसीधे निम्नलिखित के रूप में इस्तेमाल किया जा सकता है:

present_working_directory = %pwd

5
यह सवाल IPython के बारे में नहीं है
Kiro

1
@ कीरो, मेरा समाधान IPython का उपयोग करके प्रश्न का उत्तर देता है । उदाहरण के लिए, यदि कोई नई लाइब्रेरी का उपयोग करके किसी प्रश्न का उत्तर देता है, तो यह भी प्रश्न का एक स्थायी उत्तर है।
नफीज़ कुरैशी

@NafeezQuraishi आपका समाधान एक तृतीय पक्ष पुस्तकालय और एक वर्ग का परिचय देता है, जहाँ से आपको वांछित परिणाम प्राप्त करने के लिए तुरंत प्रयास करना पड़ता है। खुद, और मुझे लगता है कि कई अन्य लोग कई कारणों से बाहरी पुस्तकालयों का उपयोग करने से बचने की कोशिश करते हैं, और मैं केवल आपके समाधान की कोशिश करूंगा यदि कुछ और काम नहीं किया। सौभाग्य से, वहाँ निर्मित कार्यों की एक श्रृंखला है जिसका उपयोग आप वांछित परिणाम प्राप्त करने के लिए कर सकते हैं, और बाहरी पुस्तकालय की आवश्यकता के बिना।
इलियटवेज़ऑफ़

@ elli0t, आंशिक रूप से सहमत हैं। ज्यूपिटर नोटबुक का उपयोग करने वाले किसी व्यक्ति पर विचार करें, जिसके लिए यह सवाल है कि शायद% pwd मैजिक कमांड का उपयोग करना ओएस आयात पर आसान और बेहतर होगा।
नफीज़ कुरैशी

0

प्लेटफ़ॉर्म (macOS / Windows / Linux) पर माइग्रेशन संगतता रखने के लिए, प्रयास करें:

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

0

मैंने वर्तमान फ़ोल्डर प्राप्त करने के लिए CGI में IIS के तहत अजगर चलाने पर उपयोग करने के लिए एक फ़ंक्शन बनाया है:

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

0

मान लें कि आपके पास निम्नलिखित निर्देशिका संरचना है: -

मुख्य / fold1 fold2 fold3 ...

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 () को मुख्य समाधान के रूप में नहीं, बल्कि कोड और याद रखने और जाँचने लायक कोड के रूप में देखा।
येरूशलम प्रोग्रामर

PS मुझे लगता है कि किसी ने मेरे द्वारा पोस्ट किए गए मेरे उत्तर को संपादित और मिटा दिया ... :( ऐसे लोगों को भाग लेने से हतोत्साहित करता है यदि उनके जवाब सेंसर किए और काटे जा रहे हैं।
जेरूसलम प्रोग्रामर

1
आप इस उत्तर को संपादित करने वाले एकमात्र व्यक्ति हैं। इसके अलावा, आपके संपादन अभी भी सवाल का ठीक से जवाब नहीं देते हैं। सवाल विशेष रूप से फ़ाइल की निर्देशिका के पथ के बारे में पूछ रहा है, और आपके उत्तर में केवल वर्तमान निर्देशिका प्राप्त करने का उल्लेख है। यह एक सही उत्तर नहीं है, क्योंकि वर्तमान निर्देशिका बहुत बार नहीं है क्योंकि स्क्रिप्ट जिस निर्देशिका में है वही नहीं है। इसका कोई लेना-देना नहीं है abspath
ब्रायन ओकले

निश्चित रूप से मेरे द्वारा साझा किया गया कोड फ़ाइल की निर्देशिका में पथ देता है यदि निर्देशिका और / या फ़ाइल से चलाया जाता है जहां से आप निरपेक्ष फ़ाइल पथ जानना चाहते हैं। निश्चित रूप से यह एक सही उत्तर है। कृपया ट्रोल न हों।
यरूशलम प्रोग्रामर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.