如何从Python获取(XDG)默认用户目录?
例如,在英语中,默认用户文件夹将是:
$HOME/Desktop .... $HOME/Videos
在西class牙语中,默认用户文件夹将是:
$HOME/Escritorio .... $HOME/Vídeos
文件 ~/.config/user-dirs.dirs
具有默认文件夹的本地化名称。 (总是?)。
我需要从python脚本中获取这些名称。 我不想解析那个文件。 还有其他优雅的方式吗? 我发现了这个 :
from xdg.BaseDirectory import * print xdg_cache_home print xdg_config_dirs print xdg_config_home print xdg_data_dirs print xdg_data_home
但它不会返回那些文件夹。
提前致谢!
如果您不介意获得对GLib
的依赖,或者您已经将GTK
用作工具包,则可以使用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'
所有可用目录:
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
如果您收到此错误消息:
ImportError:使用gi.repository时,不得导入像“gobject”这样的静态模块。 请将所有出现的“import gobject”更改为“from gi.repository import GObject”。
你需要使用这个:
import glib return glib.get_user_special_dir(glib.USER_DIRECTORY_PICTURES)
安装python库以访问freedesktop.org标准
要从Python获取XDG目录,您需要安装(取决于您的python版本)以下包之一:
对于Python 2.x
sudo apt-get install python-xdg
对于Python 3:
sudo apt-get install python3-xdg
XDG目录
-
$XDG_DATA_HOME
定义了应存储用户特定数据文件的基本目录。 如果$XDG_DATA_HOME
未设置或为空,则应使用等于$HOME/.local/share
的默认值。 -
$XDG_CONFIG_HOME
定义了应存储用户特定配置文件的基本目录。 如果$XDG_CONFIG_HOME
未设置或为空,则应使用默认值$HOME/.config
。 -
$XDG_DATA_DIRS
定义除了$XDG_DATA_HOME
基目录之外的搜索数据文件的$XDG_DATA_HOME
基本目录集。$XDG_DATA_DIRS
的目录应使用冒号’:’分隔。如果
$XDG_DATA_DIRS
未设置或为空,则应使用等于/usr/local/share/:/usr/share/
值。 -
$XDG_CONFIG_DIRS
定义除了$XDG_CONFIG_HOME
基目录之外的搜索配置文件的首选顺序基本目录集。$XDG_CONFIG_DIRS
的目录应该用冒号’:’分隔。如果
$XDG_CONFIG_DIRS
未设置或为空,则应使用等于/etc/xdg
的值。
资料来源: http : //standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
更新:如何访问Ubuntu特定的XDG用户目录:
~/.config/user-dirs.dirs
文件将始终包含本地化名称,因为xdg-user-dirs-update工具控制此文件,请参阅专用手册页部分:
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.
以下python代码将允许您解析~/.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")