Python: Descobrir qual o diretório do usuário

Palavras-chave: userdir, home, homedrive, homepath, arquivo de configuração

Frequentemente precisamos guardar preferências do usuário de nossos programas em algum arquivo de configuração. Em ambientes UNIX/Linux a prática diz que esses arquivos devem ser guardados dentro do diretório $HOME e de preferência como um arquivo (ou diretório) oculto.

Mas usar a variável de ambiente $HOME para obter o diretório não é uma solução muito portável e certamente irá falhar em outros sistemas operacionais, como o Windows.

Para esses casos o módulo os.path disponibiliza a função expanduser() que irá substituir o símbolo ~ pelo caminho completo de onde devemos guardar esses os arquivos de configuração. Veja abaixo um exemplo de uso desta função:

import os.path
print os.path.expanduser("~/.arquivorc")

Rodando esse exemplo em um ambiente UNIX/Linux iremos obter algo parecido com isso:

/home/username/.arquivorc

Já em uma máquina com Windows (XP) teremos:

C:\\Documents and Settings\\username\\.arquivorc

Algumas observações:

  • Em ambientes UNIX/Linux é possível obter o $HOME de outros usuários. Para isso basta usar expanduser("~outro_usuario"). Isso não funcionará no Windows.

  • Não existe um padrão que diga o lugar correto para guardar arquivos de configuração no Windows. O diretório sugerido aqui é aceito mas aparentemente o mais correto seria: C:\Documents and Settings\username\Application Data\meu_programa\config.ini (lembrando sempre que “Application Data” pode ter outro nome em Windows de outros idiomas).

  • A forma 100% correta para achar esse diretório no Windows envolve a procura no “Registry” do Windows, mas isso fugiria do escopo dessa dica.

This entry was posted in Python. Bookmark the permalink.

One Response to Python: Descobrir qual o diretório do usuário

  1. Rodrigo Gregorio says:

    no caso do rwindows coloque #appdata# que normalmente os arquivos serão extraídos para esse diretório

Leave a Reply

Your email address will not be published. Required fields are marked *