working python3 posixpath current python python-3.x pathlib

python3 - posixpath python



Agregar otro sufijo a una ruta que ya tiene un sufijo con pathlib (3)

El siguiente código debe hacer lo que usted quiere de una manera muy dinámica.

from pathlib import Path import time p = Path(''.'') p = p / ''..'' / ''Python'' / ''Files'' / ''Texts_to_read'' / ''a_text_file'' new_p = str(p).split(''//') new_suffix = ''.txt'' new_p[-1] = new_p[-1] + new_suffix p = Path(''.'') for x in new_p: p = p / x print(new_p) print(p) print(str(p)) time.sleep(5)

El hecho de que las operaciones de cadena normales se puedan usar en este caso es algo bueno, ya que agrega un gran control sobre la ruta del archivo deseada sin requerir una gran variedad de nuevas funciones.

Estaba convirtiendo un código Python antiguo para usar pathlib lugar de os.path para la mayoría de las operaciones relacionadas con la ruta, pero terminé con el siguiente problema: necesitaba agregar otra extensión a una ruta que ya tenía una extensión (no reemplazarla) . Con os.path , ya que simplemente estamos manipulando cadenas, la solución fue agregar la extensión con operaciones de cadena:

newpath = path + ''.res''

No funciona con pathlib.Path porque no permite la concatenación de caracteres arbitrarios. Lo más cercano que pude encontrar fue lo siguiente:

newpath = path.with_suffix(path.suffix + ''.res'')

Parece una solución alternativa porque aún usa la adición de cadenas al final. Y tiene un nuevo error porque al principio me olvidé de manejar el caso en el que ya hay varias extensiones y desea agregar una nueva, lo que lleva al siguiente código para recuperar el comportamiento anterior:

newpath = path.with_suffix(''''.join(path.suffixes) + ''.res'')

Ahora no se siente tenso ni limpio, ya que utiliza más y más operaciones de cadena para lograr el comportamiento anterior en lugar de operaciones de ruta pura. El hecho de que Path.suffixes exista significa que los desarrolladores de la biblioteca consideraron el caso en el que un archivo puede tener múltiples extensiones, pero no pude encontrar una manera de simplemente agregar una nueva extensión a una ruta. ¿Hay alguna forma más idiomática que haya omitido para lograr el mismo comportamiento?

EDITAR: en realidad path.with_suffix(path.suffix + ''.res'') es suficiente para manejar el caso en el que ya hay varias extensiones de archivo, aunque no fue muy obvio para mí.


No parece que la ruta sea modificada in situ (no puede cambiar el .parts[-1] ni cambiar .suffixes , etc.), pero eso no significa que deba recurrir a algo demasiado desagradable. Lo siguiente funciona bien, incluso si no es tan elegante como me gustaría:

new_path = (path.parent / path.name).with_suffix(path.suffix + new_suffix)

donde path es su variable Path original, y new_suffix es la cadena con su nuevo sufijo / extensión (incluido el encabezado ".")


Puede convertir su Path de Path en una cadena y luego agregar una nueva extensión y volver a convertir la Path :

from pathlib import Path first = Path("D:/user/file.xy") print(first) second = Path(str(first)+".res") print(second)