Como posso obter os diretórios de usuário padrão (XDG) do Python?

5

Por exemplo, Em inglês, as pastas do usuário padrão serão:

$HOME/Desktop
....
$HOME/Videos

Em espanhol, as pastas do usuário padrão serão:

$HOME/Escritorio
....
$HOME/Vídeos

O arquivo ~/.config/user-dirs.dirs tem esses nomes de localização para as pastas padrão. (Sempre?).

Eu preciso pegar esses nomes em um script python. Eu gostaria de não analisar esse arquivo. Existe outro caminho elegante? Eu encontrei este :

from xdg.BaseDirectory import *
print xdg_cache_home
print xdg_config_dirs
print xdg_config_home
print xdg_data_dirs
print xdg_data_home

Mas não retorna essas pastas.

Obrigado antecipadamente!

    
por costales 28.04.2014 / 16:01

2 respostas

4

Se você não se importar em obter uma dependência em GLib ou se já estiver usando GTK como kit de ferramentas, poderá usar o método GLib.get_user_special_dir() .

>>> from gi.repository import GLib
>>> GLib.get_user_special_dir(GLib.USER_DIRECTORY_PICTURES)
'/home/timo/Afbeeldingen'
>>> GLib.get_user_special_dir(GLib.USER_DIRECTORY_DOCUMENTS)
'/home/timo/Documenten'
>>> GLib.get_user_special_dir(GLib.USER_DIRECTORY_DOWNLOAD)
'/home/timo/Downloads'

Todos os diretórios disponíveis :

G_USER_DIRECTORY_DESKTOP         the user's Desktop directory
G_USER_DIRECTORY_DOCUMENTS       the user's Documents directory
G_USER_DIRECTORY_DOWNLOAD        the user's Downloads directory
G_USER_DIRECTORY_MUSIC           the user's Music directory
G_USER_DIRECTORY_PICTURES        the user's Pictures directory
G_USER_DIRECTORY_PUBLIC_SHARE    the user's shared directory
G_USER_DIRECTORY_TEMPLATES       the user's Templates directory
G_USER_DIRECTORY_VIDEOS          the user's Movies directory
G_USER_N_DIRECTORIES             the number of enum values

Se você receber esta mensagem de erro:

  

ImportError: Ao usar o gi.repository, você não deve importar   módulos como "gobject". Por favor, altere todas as ocorrências de "importação   gobject "to" from gi.repository import GObject ".

Você precisa usar isso:

import glib
return glib.get_user_special_dir(glib.USER_DIRECTORY_PICTURES)
    
por Timo 29.04.2014 / 12:14
4

Instale a biblioteca python para acessar os padrões do freedesktop.org

Para obter os diretórios XDG do Python, você precisa instalar (dependendo da versão do seu Python) um dos seguintes pacotes:

Para o Python 2.x

sudo apt-get install python-xdg

Para o Python 3:

sudo apt-get install python3-xdg 

Diretórios XDG

  • $XDG_DATA_HOME define o diretório base relativo ao qual os arquivos de dados específicos do usuário devem ser armazenados. Se $XDG_DATA_HOME não estiver definido ou vazio, um padrão igual a $HOME/.local/share deverá ser usado.

  • $XDG_CONFIG_HOME define o diretório base relativo ao qual os arquivos de configuração específicos do usuário devem ser armazenados. Se $XDG_CONFIG_HOME não estiver definido ou vazio, um padrão igual a $HOME/.config deverá ser usado.

  • $XDG_DATA_DIRS define o conjunto de diretórios base ordenado por preferência para procurar por arquivos de dados além do diretório $XDG_DATA_HOME base. Os diretórios em $XDG_DATA_DIRS devem ser separados por dois pontos:: '.

    Se $XDG_DATA_DIRS não estiver definido ou vazio, um valor igual a /usr/local/share/:/usr/share/ deve ser usado.

  • $XDG_CONFIG_DIRS define o conjunto de diretórios base ordenado por preferência para procurar por arquivos de configuração além do diretório $XDG_CONFIG_HOME base. Os diretórios em $XDG_CONFIG_DIRS devem ser separados por dois pontos: ''.

    Se $XDG_CONFIG_DIRS não estiver definido ou vazio, um valor igual a /etc/xdg deve ser usado.

Fonte: link

UPDATE: Como acessar diretórios de usuários XDG específicos do Ubuntu:

O arquivo ~/.config/user-dirs.dirs sempre conterá os nomes das localizações como A ferramenta xdg-user-dirs-update controla este arquivo, veja a seção man man dedicada:

   The XDG user dirs configuration is stored in the user-dirs.dir
   file in the location pointed to by the XDG_CONFIG_HOME
   environment variable.

O seguinte código python permitirá que você analise o ~/.config/user-dirs.dirs .

#!/usr/bin/env python

import io
import os
import re
import ConfigParser

from xdg.BaseDirectory import xdg_config_home

config = ConfigParser.RawConfigParser(allow_no_value=True)

f = open(os.path.join(xdg_config_home, "user-dirs.dirs"))
user_config = "[XDG_USER_DIR]\n" + f.read()
f.close()
user_config = re.sub('$HOME', os.path.expanduser("~"), user_config)
user_config = re.sub('"', '', user_config)

config.readfp(io.BytesIO(user_config))
print config.get("XDG_USER_DIR", "XDG_PICTURES_DIR")
    
por Sylvain Pineau 28.04.2014 / 16:20