New to Busy?

每天进步一点点:配置文件 & appdirs

3 comments

oflyhigh
79
last month

对于很多应用程序来讲,为了方便用户使用,都需要保存一些信息,比如配置信息、用户数据等等。这一般有几种方式,比如说配置文件、注册表、数据库等,本质上Windows中的注册表也是一种数据库。

image.png
(图源 :pixabay)

注册表

这几种方式我最不喜欢的就是注册表了,尽管注册表操作起来还是很简单的(RegOpenKeyExRegQueryValueExRegSetValueEx等),但是我总觉得,这样做应用程序就不是那么绿色环保了。

那些所谓的安全卫士等软件,很多也是靠清理垃圾注册表项才发家的,所以我觉得Windows应用越少写注册表越好,所以自己的程序也尽量避免。

配置文件

Windows下提供了很方便的配置文件操作API,主要有两个函数:GetPrivateProfileString以及WritePrivateProfileString

尽管文档中说了相关API只是为了兼容和保留,推荐使用注册表:

Note This function is provided only for compatibility with 16-bit versions of Windows. Applications should store initialization information in the registry.

但是Win10中,相关函数依然工作正常,我又不喜欢用注册表,那当然还是用它喽,比如我的字模程序,用着就好好的:

Python 中的配置文件

Python中简单一些配置文件,直接用普通的文件读写就搞定了(或者直接用py文件导入)。

略复杂配置的可以用configparser来实现,用起来还是超级简单的。

这里不做过多介绍了,大家感兴趣的话看文末链接文档就好。

用户/应用目录等

配置文件一般可以保存在和执行程序相同的目录,但是假设有N个在不同目录中的程序可能用到相同的内容,放到执行程序所在的目录就不是那么明智了。

Windows中可以选将一些设置和数据放到用户目录,比如说%USERPROFILE% %APPDATA% 等,这些目录可以通过环境变量获取,比如Windows如下命令:

echo %APPDATA%

就会返回:

image.png

在Windows程序中,则可以通过GetEnvironmentVariable函数获取。

appdirs

说了半天,这个才是重点,就是Linux环境下,Python怎么获取用户数据目录或者应用目录。

这就要用到appdirs这个模块了,其实这个模块在Windows下也能用,不过就不去探究了。

在Linux下,使用如下方式,就可以获取用户/应用对应的数据目录了:

from appdirs import user_data_dir
appname="cutehive"
appauthor = "oflyhigh"
config_dir = user_data_dir(appname, appauthor)

上述代码得到的目录路径为:

.local/share/cutehive

这样,我们就可以在对应的目录中愉快地写入配置文件、数据、数据库等内容了,而不必自己关心和维护路径信息了。

这样做还有一个好处就是,支持跨平台操作(Windows、MacOS等),然而对我而言,倒是暂时不需要考虑呢。

相关链接

Comments

Sort byBest