Cos*_*les 5 python xdg xdg-base-directory
例如,在英语中,默认用户文件夹将是:
$HOME/Desktop
....
$HOME/Videos
Run Code Online (Sandbox Code Playgroud)
在西班牙语中,默认用户文件夹将是:
$HOME/Escritorio
....
$HOME/Vídeos
Run Code Online (Sandbox Code Playgroud)
该文件 ~/.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
Run Code Online (Sandbox Code Playgroud)
但它不会返回这些文件夹。
提前致谢!
如果您不介意依赖它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'
Run Code Online (Sandbox Code Playgroud)
所有可用目录:
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
Run Code Online (Sandbox Code Playgroud)
如果您收到此错误消息:
ImportError:使用 gi.repository 时,不得导入“gobject”等静态模块。请将所有出现的“import gobject”更改为“from gi.repository import GObject”。
你需要使用这个:
import glib
return glib.get_user_special_dir(glib.USER_DIRECTORY_PICTURES)
Run Code Online (Sandbox Code Playgroud)
要从 Python 获取 XDG 目录,您需要安装(取决于您的 Python 版本)以下软件包之一:
对于 Python 2.x
sudo apt-get install python-xdg
Run Code Online (Sandbox Code Playgroud)
对于 Python 3:
sudo apt-get install python3-xdg
Run Code Online (Sandbox Code Playgroud)
$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_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
该~/.config/user-dirs.dirs文件将始终包含本地化名称,因为xdg-user-dirs-update工具控制此文件,请参阅专用手册页部分:
Run Code Online (Sandbox Code Playgroud)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")
Run Code Online (Sandbox Code Playgroud)