2012-01-01 13 views
29

Bunun için python işlevinin ne olduğunu öğrenmek istedim:Python'da bir yol öneki nasıl kaldırılır?

Wa yolundan önce her şeyi kaldırmak istiyorum.

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

Mesela ben '/ wa/foo/bar /'

+6

Bilginize, iyi 'os.path' modülünden – ThiefMaster

cevap

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

1 işlevleri katılmak/bölünmüş kullanın: normal bir ifade kullanarak karşılaştırıldığında, bu daha basit ve muhtemelen hızlı hakkındadır. – EOL

+2

Bu karakter dizgisi '/ wa' (' path [-1:] ') içermiyorsa son karakteri döndürür. Bu durumda," if "yolunda" if "/ wa" ı kontrol etmek istediğinizde ilk – dbr

+4

sırayla, iğne samanlıkta değilken bir istisna oluşturmak için str.indx 'str.find' yerine kullanabilirsiniz. – SingleNegationElimination

2
import re 

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

Bu, ikinci bir soru için bir tamsayı ise son yolun nasıl kaldırılacağı konusunda yardımcı olur. Güzel :) – Natim

4

: os.path.relpath kullanmak edilecek Python 3.4+ için pathlib.PurePath.relative_to kullanmalısınız. belgelerine :

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

Ayrıca Sorunuzun Diğer yanıtları this StackOverflow question görüyoruz. yolları ile uğraşırken