2012-01-01 14 views
29

मैं जानना चाहता था कि इसके लिए पाइथोनिक फ़ंक्शन क्या है:पायथन में पथ उपसर्ग को कैसे निकालें?

मैं वा पथ से पहले सब कुछ हटाना चाहता हूं।

p = path.split('/') 
counter = 0 
while True: 
    if p[counter] == 'wa': 
     break 
    counter += 1 
path = '/'+'/'.join(p[counter:]) 

उदाहरण के लिए, मैं चाहता हूँ '/ पुस्तक/html/वा/foo/बार /' बनने के लिए '/ वा/foo/बार /'

+6

Fyi, पथों से निपटने के दौरान 'os.path' मॉड्यूल – ThiefMaster

उत्तर

22
>>> path = '/book/html/wa/foo/bar/' 
>>> path[path.find('/wa'):] 
'/wa/foo/bar/' 
+0

+1 से विभाजित/जुड़ने के कार्यों का बेहतर उपयोग करते हैं: नियमित अभिव्यक्ति का उपयोग करने की तुलना में, यह आसान है, और शायद तेज़ के बारे में। – EOL

+2

यदि स्ट्रिंग में '/ wa' (' path [-1:] ') नहीं है, तो यह अंतिम वर्ण देता है, इसलिए यदि ऐसा हो सकता है तो आप पथ में 'if"/wa "को जांचना चाहते हैं, पहले – dbr

+4

वैकल्पिक रूप से, जब आप सुई घाटी में नहीं है तो अपवाद बढ़ाने के लिए आप 'str.indind' के बजाय 'str.index' का उपयोग कर सकते हैं। – SingleNegationElimination

2
import re 

path = '/book/html/wa/foo/bar/' 
m = re.match(r'.*(/wa/[a-z/]+)',path) 
print m.group(1) 
+0

यह मेरे दूसरे प्रश्न के लिए मदद करता है जो अंतिम पथ को हटाने के लिए था, अगर यह पूर्णांक है। अच्छा :) – Natim

98

एक बेहतर जवाब होगा

http://docs.python.org/2/library/os.path.html#os.path.relpath

>>> import os 
>>> full_path = '/book/html/wa/foo/bar/' 
>>> print os.path.relpath(full_path, '/book/html') 
'wa/foo/bar' 
+6

यह एक बेहतर जवाब है क्योंकि यह विभिन्न पथ विभाजक के साथ किसी भी मुद्दे से बचाता है। – intrepidhero

4

: os.path.relpath उपयोग करने के लिए किया जा पायथन 3.4+ के लिए, आपको pathlib.PurePath.relative_to का उपयोग करना चाहिए। प्रलेखन से:

>>> p = PurePosixPath('/etc/passwd') 
>>> p.relative_to('/') 
PurePosixPath('etc/passwd') 

>>> p.relative_to('/etc') 
PurePosixPath('passwd') 

>>> p.relative_to('/usr') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "pathlib.py", line 694, in relative_to 
    .format(str(self), str(formatted))) 
ValueError: '/etc/passwd' does not start with '/usr' 

इसके अलावा अपने प्रश्न के जवाब के लिए और अधिक this StackOverflow question देखते हैं।

संबंधित मुद्दे