TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #212 2.16K
Как быстро отрезать от пути несколько элементов с любой стороны?
Например, есть длинный путь:

path = '/home/user/projects/proj1/assets/assetname/geo/publish/v001/body.geo'

Для удобного отображения логов (или еще какой-то абстрактной задачи) я хочу видеть только 3 последних элемента.

▫️Сейчас мы не будем усложнять задачу с выделением только нужных элементов с парсингом самой строки. Работаем только с индексами элементов.
▫️Учитываем, что путь может прийти с неизвестно куда направленными слешами.
▫️Хочу реализацию в одну строку

Вот так можно это сделать с помощью модуля os.path

>>> os.path.join(
... *os.path.normpath(
... path
... ).replace(
... '\\', '/'
... ).split('/')[-3:])
'publish/v001/body.geo'

Монструозно, но работает👹

Более красивый вариант это класс pathlib.Path.
У него есть две функции, которые нам помогут

🔸 Свойство parts, которое возвращает список элементов пути.
🔸 Конструктор Path() может принимать несколько строк которые объединятся в один путь. То есть аналогично функции join.

>>> Path('folder', 'file')
PosixPath('folder/file')

Поэтому мы можем сделать так:

>>> Path(*Path(path).parts[-5:])
PosixPath('publish/v001/body.geo')

Ну вот, более лаконично (питонично🙄)
А еще можно вырезать середину, оставив начало и конец

>>> p = Path(path)
>>> Path(*p.parts[:3],'...', *p.parts[-2:])
PosixPath('/home/user/.../v001/body.geo')

#tricks #libs
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →