2012-01-01 12 views
29

Volevo sapere qual è la funzione pythonic per questo:Come rimuovere un prefisso del percorso in Python?

Voglio rimuovere tutto prima del percorso wa.

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

Per esempio, io voglio '/ libro/html/wa/foo/bar /' per diventare '/ wa/foo/bar /'

+6

Fyi, quando si ha a che fare con i percorsi meglio utilizzare le funzioni split/join dal modulo 'os.path' – ThiefMaster

risposta

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

+1: rispetto all'utilizzo di un'espressione regolare, questo è più semplice e probabilmente altrettanto veloce. – EOL

+2

Questo restituisce l'ultimo carattere se la stringa non contiene '/ wa' (' percorso [-1:] '), quindi se ciò potrebbe accadere, si dovrebbe controllare' se "/ wa" nel percorso' prima – dbr

+4

alternativamente, puoi usare 'str.index' invece di' str.find' per generare un'eccezione quando l'ago non si trova nel pagliaio. – SingleNegationElimination

2
import re 

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

Ciò aiuta la mia seconda domanda che consisteva nel rimuovere l'ultimo percorso se si tratta di un numero intero. Bello :) – Natim

4

Per Python 3.4+, è necessario utilizzare pathlib.PurePath.relative_to. Dalla documentazione:

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

vedono anche this StackOverflow question per ulteriori risposte alla tua domanda.

Problemi correlati