path

Juntar, normalizar e inspecionar caminhos do sistema de arquivos.

import path

Os caminhos usam / como separador e entendem tanto caminhos absolutos estilo Unix (/usr/bin) quanto prefixos de unidade do Windows (C:).

Construindo caminhos

path_join(esquerda, direita) → string

Junta dois segmentos com exatamente um separador, colapsando excessos.

path_join("a/", "/b")
-- Saída: "a/b"
path_join_many(partes) → string

Junta uma lista de segmentos da esquerda para a direita.

path_join_many(["a", "b", "c"])
-- Saída: "a/b/c"
path_split(caminho) → lista

Divide um caminho em seus segmentos não vazios.

path_split("/usr/local/bin")
-- Saída: ["usr", "local", "bin"]
path_sep() → string

O separador de caminho usado pela biblioteca.

path_sep()
-- Saída: "/"

Inspeção

path_is_absolute(caminho) → booleano

Se o caminho é absoluto (/ inicial ou prefixo de unidade).

path_is_absolute("/etc/hosts")
-- Saída: true
path_is_absolute("docs/api")
-- Saída: false
path_basename(caminho) → string

O último segmento do caminho.

path_basename("/usr/local/bin/bern")
-- Saída: "bern"
path_dirname(caminho) → string

O diretório pai.

path_dirname("/usr/local/bin/bern")
-- Saída: "/usr/local/bin"
path_extname(caminho) → string

A extensão incluindo o ponto inicial, ou "" quando não há.

path_extname("archive.tar.gz")
-- Saída: ".gz"
path_stem(caminho) → string

O basename sem a extensão.

path_stem("report.pdf")
-- Saída: "report"

Normalização

path_normalize(caminho) → string

Resolve separadores redundantes e os segmentos . / ...

path_normalize("a/./b/../c")
-- Saída: "a/c"

path_normalize("/a//b/../c")
-- Saída: "/a/c"

Juntando tudo

As funções combinam para reescrever um caminho com segurança - aqui movemos um arquivo para um diretório irmão mantendo seu nome:

Realocando um arquivo ao lado da origem

import path

source = "/projects/bern/src/main.brn"

dir  = path_dirname(source)
-- "/projects/bern/src"
name = path_basename(source)
-- "main.brn"

dest = path_normalize(path_join_many([dir, "..", "build", name]))
-- Saída: "/projects/bern/build/main.brn"

E derivar um nome de saída trocando a extensão via path_stem:

Escolhendo um nome de saída

import path

def with_ext(file, ext) -> path_join(path_dirname(file), path_stem(file) + ext)

with_ext("docs/notes.md", ".html")
-- Saída: "docs/notes.html"