Obtención de una matriz específica de un camino por su nombre

Tomerikoo:

Estoy tratando de mover mi código de usar os.patha usar pathlib.Path.

Tengo una función que devuelve la ruta completa de un determinado padres que busco de un nombre constante. Como se dijo, estoy usando actualmente os.pathy cuerdas para caminos Así que ahora esto se hace con regulares-expresiones.

Lo que quiero es, por ejemplo, para una constante parent = da ser capaz de obtener:

/a/b/c/d/e      -->  /a/b/c/d
/a/b/c/d/e/f    -->  /a/b/c/d
/root/a/b/c/d/e -->  /root/a/b/c/d

Nota : Como muestra el ejemplo no quiero confiar en cualquier posición fija por ambos lados.

He tratado de 2 maneras, pero se siente un tanto torpe bits:

  1. Utilice el partsfin de encontrar la correcta parentselemento:

    >>> path = "/a/b/c/d/e/f"
    >>> parts = Path(path).parts
    >>> parent_index = len(parts) - 1 - parts.index('d') - 1
    >>> Path(path).parents[parent_index]
    PosixPath('/a/b/c/d')
    
  2. Utilice el partsy concatenar los relevantes:

    >>> path = "/root/a/b/c/d/e"
    >>> parts = Path(path).parts
    >>> Path(*parts[:parts.index('d')+1])
    PosixPath('/root/a/b/c/d')
    

Yo diría que la segunda parece razonable, pero aún así, mi pregunta es: ¿Hay una mejor manera de lograr esto?


PD En caso de que la parte que no está presente en el camino que es suficiente para elevar una excepción o cualquier indicador (en este momento envuelvo con el código indexanterior con una try/except).

blhsing:

Puede utilizar un whilebucle en lugar de seguir buscando hacia atrás de uno de los padres del nombre dado:

path = Path("/a/b/c/d/e/f")
while path.name != 'd':
    path = path.parent
    assert path.name, 'No parent found with the given name'
print(path)

Este salidas:

/a/b/c/d

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=408750&siteId=1
Recomendado
Clasificación