2008-11-27 22 views
5

कल्पना कीजिए मैं निम्नलिखित है:एक ही अभिव्यक्ति में दो बार विभाजित?

inFile = "/adda/adas/sdas/hello.txt" 

# that instruction give me hello.txt 
Name = inFile.name.split("/") [-1] 

# that one give me the name I want - just hello 
Name1 = Name.split(".") [0] 

वहाँ आसान बनाने कि लिए किसी भी मौका है सिर्फ एक अभिव्यक्ति में एक ही काम कर रही है?

उत्तर

20

आप स्वतंत्र रूप से os.path.basename का उपयोग कर एक पथ का अंतिम हिस्सा मिलता है और फिर os.path.splitext का उपयोग विस्तार के बिना फ़ाइल नाम पाने के लिए करने के लिए क्या आप मंच चाहते हैं प्राप्त कर सकते हैं।

from os.path import basename, splitext 

pathname = "/adda/adas/sdas/hello.txt" 
name, extension = splitext(basename(pathname)) 
print name # --> "hello" 

os.path.basename और str.split के बजाय os.path.splitext, या re.split का उपयोग करना अधिक उचित है (और इसलिए तो किसी अन्य जवाब अधिक अंक प्राप्त किए हैं) क्योंकि यह अन्य platforms that use different path separators (you would be surprised how varried this can be) पर नष्ट नहीं होती है।

यह भी सबसे अधिक अंक वहन करती है क्योंकि यह "एक पंक्ति" ठीक करने के लिए अपने सवाल का जवाब और सौंदर्य की दृष्टि से अधिक भाता है तो अपने उदाहरण है (कि भले ही बहस का मुद्दा है के रूप में स्वाद के सभी सवाल कर रहे हैं)

+0

यह उचित समाधान है, लेकिन इस सवाल का जवाब नहीं है। मेरा उलटा है :-) +1। –

+0

+1: एन 00 बी प्रश्न के लिए उचित समाधान। –

+0

@ विंको वर्सालोविक आपका रिवर्स नहीं है, और यह आपके प्रश्न का पूरी तरह उत्तर देता है। –

1
>>> inFile = "/adda/adas/sdas/hello.txt" 
>>> inFile.split('/')[-1] 
'hello.txt' 
>>> inFile.split('/')[-1].split('.')[0] 
'hello' 
0

मैं बहुत यकीन है कि कुछ Regex-निंजा *, आप ऐसा करने के लिए एक कम या ज्यादा समझदार रास्ता देना होगा (या के रूप में मैं अब अन्य लोगों के देखने तैनात हैं: एक लाइन पर दो भाव लिखने के तरीके ...)

लेकिन मैं क्यों सोच रहा हूँ आप इसे सिर्फ एक अभिव्यक्ति के साथ विभाजित करना चाहते हैं? इस तरह के एक साधारण विभाजन के लिए, कुछ उन्नत या तो तर्क बनाने के लिए यह संभवतः दो करने के लिए तेज़ है। यदि आप दो बार विभाजित करते हैं तो यह भी सुरक्षित है:

मुझे लगता है कि आप पथ, फ़ाइल नाम और फ़ाइल एक्सटेंशन को अलग करना चाहते हैं, अगर आप पहले '/' पर विभाजित करते हैं तो आपको पता है कि फ़ाइल नाम अंतिम सरणी अनुक्रमणिका में होना चाहिए, फिर आप यह देखने के लिए कि क्या आप फ़ाइल एक्सटेंशन पा सकते हैं या नहीं, केवल अंतिम इंडेक्स को विभाजित करने का प्रयास कर सकते हैं। फिर पथ पर नामों में थॉट्स होने पर आपको परवाह करने की आवश्यकता नहीं है।

* (किसी भी समझदार नियमित अभिव्यक्ति के उपयोगकर्ताओं, नाराज नहीं होना चाहिए;।)

1

अगर यह हमेशा की तरह आप ऊपर os.path.split और os.path उपयोग कर सकते हैं एक रास्ता होने जा रहा है .splitext

निम्न उदाहरण सिर्फ नमस्ते

from os.path import split, splitext 
path = "/adda/adas/sdas/hello.txt" 
print splitext(split(path)[1])[0] 

प्रिंट होगा अधिक जानकारी के लिए देख https://docs.python.org/library/os.path.html

+0

+1 के रास्ते में एक गलतफहमी थी। यह हमेशा सहायक होता है। किसी को मछली दें ... किसी को मछली कैसे सिखाएं ... –

2

बल्कि उदाहरण का विश्लेषण करने की कोशिश कर की तुलना में इस विषय में प्रश्न का उत्तर देना ...

आप वास्तव में Florians समाधान का उपयोग करने के लिए यदि आप पथ विभाजित करना चाहते हैं, लेकिन अगर तुम नहीं वादा पथ पार्स करने के लिए इस का उपयोग करने के लिए ...

आप re.split() उपयोग कर सकते हैं द्वारा कई विभाजक का उपयोग कर या विभाजित करने के लिए: उन लोगों के साथ ing एक '|', है इस पर एक नज़र:

import re 
inFile = "/adda/adas/sdas/hello.txt" 
print re.split('\.|/', inFile)[-2] 
संबंधित मुद्दे