2012-01-01 3 views
29

나는 이것을 위해 pythonic 함수가 무엇인지 알고 싶었습니다.파이썬에서 경로 접두어를 제거하는 방법은 무엇입니까?

wa 경로 앞의 모든 것을 제거하고 싶습니다.

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

는 예를 들어, 내가 '/ WA/foo는/바 /'

+6

Fyi는 경로를 처리 할 때'os.path' 모듈의 split/join 함수를 사용하는 것이 더 좋습니다 – ThiefMaster

답변

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

+1 : 정규 표현식을 사용하는 것에 비해 이것은 더 간단합니다. – EOL

+2

문자열에'/ wa' ('path [-1 :]')가 없으면 마지막 문자를 반환하므로, 만약'if "/ wa"in path "를 먼저 확인하고 싶다면 – dbr

+4

바늘이 건초 더미에 없을 때'str.find' 대신'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

정수 인 경우 마지막 경로를 제거하는 방법 인 두 번째 질문에 도움이됩니다. Nice :) – Natim

4

: os.path.relpath를 사용하는 Python 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를 참조하십시오.

관련 문제