Em ciência de dados, a maioria dos projetos é realizada em um esforço colaborativo. Compartilhamos código, dados, tabelas, figuras e assim por diante. Por trás de tudo, está o sistema de arquivos do sistema operacional (SO). Em um mundo perfeito, o mesmo programa daria a mesma saída quando executado em sistemas operacionais diferentes. Infelizmente, nem sempre é esse o caso. Um exemplo disso é a diferença entre os caminhos do Windows, tal como C:\\user\john\
, e do Linux, como /home/john
. Por isso é importante discutir as melhores práticas em sistema de arquivos.
Julia tem recursos de sistema de arquivos nativos que lidam com as diferenças entre os sistemas operacionais. Eles estão localizados no módulo Filesystem
da biblioteca central Base
de Julia.
Sempre que você estiver lidando com arquivos como CSV, Excel ou qualquer outro script de Julia, certifique-se de que seu código funciona em sistemas de arquivos de SOs diferentes. Isso é facilmente realizado com as funções joinpath
, @__FILE__
e pkgdir
.
Se você escrever seu código em um pacote, você pode usar pkgdir
para obter o diretório raiz do pacote. Por exemplo, para o pacote de Julia Data Science (JDS) que usamos para produzir este livro:
/home/runner/work/JuliaDataScience-PT/JuliaDataScience-PT
como você pode ver, o código para produzir este livro foi executado em um computador Linux. Se você está usando um script, você pode obter a localização do arquivo de script via
root = dirname(@__FILE__)
O bom desses dois comandos é que eles são independentes de como o usuário iniciou o Julia. Em outras palavras, não importa se o usuário iniciou o programa com julia scripts/script.jl
ou julia script.jl
, em ambos os casos os caminhos são os mesmos.
A próxima etapa seria incluir o caminho relativo a partir de root
para o nosso arquivo desejado. Uma vez que diferentes sistemas operacionais têm maneiras diferentes de construir caminhos relativos com subpastas (alguns usam barras /
enquanto outros podem usar barras invertidas \
), não podemos simplesmente concatenar o caminho relativo do arquivo com a string root
. Para isso, temos a função joinpath
, que unirá diferentes caminhos relativos e nomes de arquivos de acordo com a implementação específica do sistema de arquivos do seu sistema operacional.
Supondo que você tenha um script chamado my_script.jl
dentro do diretório do seu projeto. Você pode ter uma representação robusta do caminho do arquivo para my_script.jl
como:
joinpath(root, "my_script.jl")
/home/runner/work/JuliaDataScience-PT/JuliaDataScience-PT/my_script.jl
joinpath
também lida com subfolders. Agora vamos imaginar uma situação comum em que você tem uma pasta chamada data/
no diretório do seu projeto. Dentro desta pasta, há um arquivo CSV chamado my_data.csv
. Você pode ter a mesma representação robusta do caminho do arquivo para my_data.csv
como:
joinpath(root, "data", "my_data.csv")
/home/runner/work/JuliaDataScience-PT/JuliaDataScience-PT/data/my_data.csv
É um bom hábito de adquirir, porque é muito provável que evite problemas para você ou outras pessoas mais tarde.