Добавление суффикса к имени полного пути перед расширением - PullRequest
1 голос
/ 04 апреля 2020

Я перемещаю часть своего кода с os.path на pathlib.Path и обнаружил, что в целом он намного лучше.

По конкретному * Задача 1050 * Я обнаружил, что на самом деле os.path может быть более удобным в использовании. Я хочу создать новый путь из заданного, добавив суффикс к его имени и сохранив то же root и расширение. Например, из:

/a/b/c/file.txt

Я хочу получить:

/a/b/c/file_test.txt

Используя os.path, это можно легко сделать с помощью splitext:

>>> import os
>>> path = "/a/b/c/file.txt"
>>> base, ext = os.path.splitext(path)
>>> base + "_test" + ext
'/a/b/c/file_test.txt'

Но, просматривая документы pathlib , я нашел with_name и with_suffix и получил что-то вроде:

>>> from pathlib import Path
>>> path = Path("/a/b/c/file.txt")
>>> path.with_suffix('').with_name(path.stem + "_test").with_suffix(path.suffix)
PosixPath('/a/b/c/file_test.txt')

Который, я считаю, намного хуже, чем os.path версия.

Есть ли лучший, более чистый способ достижения этого с pathlib?

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Смешивая некоторые из ваших подходов, вы также можете сделать:

from pathlib import Path

path = Path("/a/b/c/file.txt")
path.with_name(path.stem + '_test' + path.suffix)
# PosixPath('/a/b/c/file_test.txt')
1 голос
/ 04 апреля 2020

Найдя этот ответ о добавлении еще одного суффикса к пути, я обнаружил, что более чистый способ сделать это может быть:

>>> path = Path("/a/b/c/file.txt")
>>> path.parent / (path.stem + "_test" + path.suffix)
PosixPath('/a/b/c/file_test.txt')
...