मैं पायथन में फ़ाइल पथ से फ़ोल्डर पथ कैसे निकाल सकता हूं?


116

मैं पूर्ण पथ से फ़ाइल के लिए केवल फ़ोल्डर पथ प्राप्त करना चाहूंगा।

उदाहरण के लिए T:\Data\DBDesign\DBDesign_93_v141b.mdbऔर मैं सिर्फ T:\Data\DBDesign(को छोड़कर \DBDesign_93_v141b.mdb) प्राप्त करना चाहूंगा ।

मैंने कुछ इस तरह की कोशिश की है:

existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
wkspFldr = str(existGDBPath.split('\\')[0:-1])
print wkspFldr 

लेकिन इसने मुझे इस तरह एक परिणाम दिया:

['T:', 'Data', 'DBDesign']

वह परिणाम नहीं है जिसकी मुझे आवश्यकता है (होने की T:\Data\DBDesign)।

किसी भी विचार पर कि मैं अपनी फ़ाइल का पथ कैसे प्राप्त कर सकता हूं?

जवाबों:


140

आप splitफ़ंक्शन के अपने उपयोग के साथ लगभग वहाँ थे । आपको बस तार में शामिल होने की जरूरत है, जैसे कि निम्न।

>>> import os
>>> '\\'.join(existGDBPath.split('\\')[0:-1])
'T:\\Data\\DBDesign'

हालाँकि, मैं यह करने के लिए os.path.dirnameफ़ंक्शन का उपयोग करने की सलाह दूंगा, आपको बस स्ट्रिंग पास करने की आवश्यकता है, और यह आपके लिए काम करेगा। चूंकि, आप खिड़कियों पर लगते हैं, abspathफ़ंक्शन का उपयोग करने पर भी विचार करें । एक उदाहरण:

>>> import os
>>> os.path.dirname(os.path.abspath(existGDBPath))
'T:\\Data\\DBDesign'

यदि आप विभाजित होने के बाद फ़ाइल का नाम और निर्देशिका पथ दोनों चाहते हैं, तो आप os.path.splitफ़ंक्शन का उपयोग कर सकते हैं जो एक टपल देता है, निम्नानुसार।

>>> import os
>>> os.path.split(os.path.abspath(existGDBPath))
('T:\\Data\\DBDesign', 'DBDesign_93_v141b.mdb')

os.sep.join(existGDBPath.split(os.sep)[:-1]सुंदर दिखता है।
डेव बब्बिट

88

PATHLIB MODULE (अद्यतन किए गए उत्तर) के साथ

नए विकास के लिए पैथलिब का उपयोग करने पर विचार करना चाहिए । यह Python3.4 के लिए stdlib में है, लेकिन पहले के संस्करणों के लिए PyPI पर उपलब्ध है । यह लाइब्रेरी पथों में हेरफेर करने के लिए एक अधिक ऑब्जेक्ट-ऑरेंटेड विधि प्रदान करती है और इसके <opinion>साथ पढ़ने और प्रोग्राम करने में बहुत आसान है </opinion>

>>> import pathlib
>>> existGDBPath = pathlib.Path(r'T:\Data\DBDesign\DBDesign_93_v141b.mdb')
>>> wkspFldr = existGDBPath.parent
>>> print wkspFldr
Path('T:\Data\DBDesign')

OS MODULE के साथ

Os.path मॉड्यूल का उपयोग करें :

>>> import os
>>> existGDBPath = r'T:\Data\DBDesign\DBDesign_93_v141b.mdb'
>>> wkspFldr = os.path.dirname(existGDBPath)
>>> print wkspFldr 
'T:\Data\DBDesign'

आप आगे बढ़ सकते हैं और मान सकते हैं कि यदि आपको किसी प्रकार के फ़ाइल नाम में हेरफेर करने की आवश्यकता है तो इसे पहले ही लागू कर दिया गया है os.path। यदि नहीं, तो आपको अभी भी बिल्डिंग ब्लॉक के रूप में इस मॉड्यूल का उपयोग करना होगा।


Path().parentमैं क्या देख रहा था!
iedmrc



0

यहाँ पथ पथ इंट्री, पथ टोकन बंटवारे के लिए मेरी छोटी उपयोगिता सहायक है:

import os    
# usage: file, path = splitPath(s)
def splitPath(s):
    f = os.path.basename(s)
    p = s[:-(len(f))-1]
    return f, p

0

कोई भी ईएसआरआई जीआईएस टेबल फील्ड कैलकुलेटर इंटरफेस में ऐसा करने की कोशिश कर रहा है, पायथन पार्सर के साथ ऐसा कर सकता है :

PathToContainFolder =

"\\".join(!FullFilePathWithFileName!.split("\\")[0:-1])

ताकि

\ Users \ me \ Desktop \ New फ़ोल्डर \ file.txt

हो जाता है

\ Users \ me \ Desktop \ New फ़ोल्डर

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.