2009-11-06 9 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' 
>>> 

estoy esperando la salida de path.lstrip('/Volumes') debe ser /Users¿Por qué str.lstrip elimina un carácter adicional?

+1

¿Puede considerar la revisión del título de su pregunta para ser más específico, es decir, para que las personas que busquen lo mismo lo encuentren? –

Respuesta

24

lstrip está basada en caracteres, que elimina todos los caracteres desde el extremo izquierdo que se encuentran en esa cadena.

Para verificar esto, intente esto:

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

Desde/es parte de la cadena, se elimina.

Sospecho que es necesario utilizar rebanar lugar:

pero espero que alguien con un conocimiento más íntimo de la biblioteca de Python podría darle una mejor opción.

+0

Esa es la "forma más obvia de hacerlo". –

14

¡El argumento pasado a lstrip se toma como un conjunto de caracteres!

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

Véase también la documentation

Es posible que desee utilizar str.replace()

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

devolver una copia de la cadena con todas las apariciones de la subcadena de edad reemplazado por el nuevo. Si se proporciona el recuento de argumentos opcional, solo se reemplazan las primeras ocurrencias de recuento.

Para las rutas, es posible que desee utilizar os.path.split(). Devuelve una lista de los elementos de rutas.

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

a su problema:

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

El ejemplo anterior muestra, cómo lstrip() obras. Elimina la forma de inicio '/ vol' a la izquierda. Entonces, comienza de nuevo ... Entonces, en su ejemplo, eliminó completamente '/ Volumes' y comenzó a eliminar '/'. Solo eliminó el '/' ya que no había 'V' después de esta barra inclinada.

HTH

+0

eso no es cierto, documentos: * El argumento 'chars' es una cadena que especifica el conjunto de caracteres que se eliminarán. * – SilentGhost

+0

@SilentGhost: lo siento, mi error, lo edité. – tuergeist

+2

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

1

lstrip doc dice:

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 

Así que va a eliminar a todos los personajes que se contiene en la cadena dada, incluyendo tanto la 's' y caracteres '/'.

17

La tira está basada en caracteres. Si usted está tratando de hacer la manipulación camino que debe echar un vistazo a os.path

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

Aquí es una versión primitiva de lstrip (que escribí) que podría ayudar a aclarar las cosas para usted:

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) 

Por lo tanto, puede ver que cada aparición de un personaje en caracteres se elimina hasta que se encuentra un carácter que no está en caracteres.Una vez que eso sucede, la eliminación se detiene y el resto de la cadena simplemente se devuelve

Cuestiones relacionadas