例如,在英语中默认的用户文件夹将是:
$HOME/Desktop
....
$HOME/Videos
在西班牙语中,默认用户文件夹是:
$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
但它没有返回这些文件夹。
提前致谢!
答案1
如果你不介意依赖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)
答案2
安装 python 库以访问 freedesktop.org 标准
要从 Python 获取 XDG 目录,您需要安装芘。您可以使用 APT(取决于您的 Python 版本)使用以下软件包之一进行安装:
对于 Python 2.x
sudo apt-get install python-xdg
对于 Python 3:
sudo apt-get install python3-xdg
你也可以从 PyPI 安装。
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_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-用户目录更新工具控制此文件,请参阅专门的手册页部分:
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")
答案3
2022 年 12 月,我仍然在 Ubuntu 22.04 上看到这个问题。
我意识到
/usr/lib/python3.10 and ~/.local/lib/python3.10
没有 dist-packages 或 xdg。但是
/usr/lib/python3/dist-packages/
有 xdg,其中包含BaseDirectory.py
和其他软件包。
最终对我有用的是将文件复制到我的主路径:
cp /usr/lib/python3/dist-packages/xdg/BaseDirectory.py ~/.local/lib/python3.10/site-packages/xdg/
答案4
如果你不想安装任何依赖项,你可以遵循规范编写自己的代码,或者复制BaseDirectory.py
。代码非常简单:
import os
_home = os.path.expanduser('~')
xdg_data_home = os.environ.get('XDG_DATA_HOME') or \
os.path.join(_home, '.local', 'share')
xdg_config_home = os.environ.get('XDG_CONFIG_HOME') or \
os.path.join(_home, '.config')