2009-11-06 11 views
10
Python 2.6 (trunk:66714:66715M, Oct 1 2008, 18:36:04) 
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> path = "/Volumes/Users" 
>>> path.lstrip('/Volume') 
's/Users' 
>>> path.lstrip('/Volumes') 
'Users' 
>>> 

Ich erwarte Leistung von path.lstrip('/Volumes')/UsersWarum entfernt str.lstrip ein zusätzliches Zeichen?

+1

Können Sie in Betracht ziehen, den Titel Ihrer Frage zu präzisieren, d. H., So dass Leute, die nach demselben suchen, ihn finden können? –

Antwort

24

lstrip ist zeichenbasierte sein sollte, entfernt es alle Zeichen vom linken Ende, das in diesem String ist.

Um dies zu überprüfen, versuchen Sie dies:

"/Volumes/Users".lstrip("semuloV/") 

Da/Teil des Strings ist, es entfernt wird.

ich Sie vermuten, müssen statt Aufschneiden verwenden:

aber hoffentlich jemand mit intimer Kenntnis der Python-Bibliothek haben Sie vielleicht eine bessere Option geben.

+0

Das ist der "offensichtliche Weg, es zu tun". –

14

Das an lstrip übergebene Argument wird als Zeichensatz interpretiert!

>>> ' spacious '.lstrip() 
'spacious ' 
>>> 'www.example.com'.lstrip('cmowz.') 
'example.com' 

Siehe auch die documentation

Sie möchten vielleicht str.replace()

str.replace(old, new[, count]) 
# e.g. 
'/Volumes/Home'.replace('/Volumes', '' ,1) 

Return eine Kopie des Strings mit allen Vorkommen von Teilzeichen alten durch neue ersetzt verwenden. Wenn die Anzahl der optionalen Argumente angegeben wird, werden nur die ersten Zählungen ersetzt.

Für Pfade können Sie os.path.split() verwenden. Es gibt eine Liste der Pfadelemente zurück.

>>> os.path.split('/home/user') 
('/home', '/user') 

Um Ihr Problem:

>>> path = "/vol/volume" 
>>> path.lstrip('/vol') 
'ume' 

Das obige Beispiel zeigt, wie lstrip() funktioniert. Es entfernt '/ vol' beginnend von links. Dann beginnt es wieder ... Also, in Ihrem Beispiel wurde "/ Volumes" vollständig entfernt und "/" entfernt. Es entfernte nur das '/', da nach diesem Schrägstrich kein 'V' vorhanden war.

HTH

+0

das ist nicht wahr, docs: * Das Argument 'chars' ist eine Zeichenkette, die den Satz von Zeichen angibt, die entfernt werden sollen. * – SilentGhost

+0

@SilentGhost: Entschuldigung, mein Fehler, ich habe es bearbeitet. – tuergeist

+2

'/home/user/Volumes/important_path'.replace('/Volumes ',' ', 1)' -> ''/home/user/wichtiger_pfad'' –

1

lstrip doc sagt:

Return a copy of the string S with leading whitespace removed. 
If chars is given and not None, remove characters in chars instead. 
If chars is unicode, S will be converted to unicode before stripping 

So, jedes Zeichen sind zu entfernen, die in dem gegebenen String, einschließlich 's' und '/' Zeichen enthalten ist.

17

Streifen ist zeichenbasiert. Wenn Sie versuchen, Pfad Manipulation zu tun, sollten Sie einen Blick auf os.path

>>> os.path.split("/Volumes/Users") 
('/Volumes', 'Users') 
0

Hier ist eine primitive Version von lstrip (das ich geschrieben habe), die klare Dinge helfen könnte für Sie up:

def lstrip(s, chars): 
    for i in range len(s): 
     char = s[i] 
     if not char in chars: 
      return s[i:] 
     else: 
      return lstrip(s[i:], chars) 

So können Sie sehen, dass jedes Vorkommen eines Zeichens in Zeichen so lange entfernt wird, bis ein Zeichen gefunden wird, das nicht in Zeichen steht.Sobald dies passiert, stoppt die Löschung und der Rest der Zeichenfolge wird einfach zurückgegeben

Verwandte Themen