当前位置:  开发笔记 > 编程语言 > 正文

存储python程序设置的官方方式是什么?

如何解决《存储python程序设置的官方方式是什么?》经验,为你挑选了7个好方法。

Django使用真正的Python文件进行设置,Trac使用.ini文件,其他一些软件使用XML文件来保存这些信息.

这些方法中有一种是由Guido和/或Python社区提供的吗?



1> Lakshman Pra..:

取决于主要的目标受众.

如果是程序员无论如何都要更改文件,只需使用settings.py之类的python文件

如果它是最终用户,那么考虑一下ini文件.


典型的`settings.py`文件是什么样的?
我同意第一部分,但如果最终用户需要更改它,那么ConfigParser可以阅读.
我认为他指的是Django settings.py文件.它是一个有效的python文件,包含字符串,元组,列表和其他变量的声明.

2> brianz..:

正如许多人所说,没有"官方"的方式.但是,有很多选择.今年在PyCon上有一个关于许多可用选项的讨论.


@mac,我找到了它:http://blip.tv/pycon-us-videos-2009-2010-2011/a-configuration-comparison-in-python-2006550

3> drdaeman..:

不知道这是否可以被视为"官方",但它在标准库中:14.2.ConfigParser - 配置文件解析器.

显然,这不是一个通用的解决方案.只需使用最适合任务的任何东西,没有任何必要的复杂性(特别是 - 图灵完整性!考虑自动或GUI配置器).


当然JSON是标准的,但这个模块被称为"配置文件解析器"有一个原因.我发现它非常适合读/写,对新手和非新手用户来说都很容易理解.

4> Moshe Revah..:

我用架子(http://docs.python.org/library/shelve.html):

shelf = shelve.open(filename)
shelf["users"] = ["David", "Abraham"]
shelf.sync() # Save


从文档",因为搁架模块由pickle支持,从不受信任的源加载架子是不安全的.与pickle一样,加载架子可以执行任意代码".如果这个问题是为了指导新手,每个人都应该将它们指向configparser模块,否则指向JSON或自定义文件.INI文件部分比JSON更加定义(可读),即使你为它的代码做了准备.[]贝母增加了一点粗体感,所以部分很容易观看.

5> jhufford..:

还有一个选项,PyQt.Qt具有独立于平台的方式来存储QSettings类的设置.在引擎盖下,在Windows上它使用注册表,在linux中它将设置存储在隐藏的conf文件中.QSettings工作得很好,而且很无聊.



6> Shane C. Mas..:

我不确定是否存在"官方"方式(在Python的Zen中没有提及:)) - 我倾向于自己使用Config Parser模块,我认为你会发现这很常见.我更喜欢python文件方法,因为你可以回写它并在需要时动态重新加载.



7> Cobry..:

据我所知,没有幸福的解决方案.存储应用程序设置没有正确或错误的方式,只要你很舒服,xml,json或所有类型的文件都可以.对于python我个人使用pypref它非常简单,跨平台和直接.

pypref非常有用,因为可以存储静态和动态设置和首选项...

    from pypref import Preferences

    #  create singleton preferences instance
    pref = Preferences(filename="preferences_test.py")

    # create preferences dict
    pdict = {'preference 1': 1, 12345: 'I am a number'}

    # set preferences. This would automatically create preferences_test.py 
    # in your home directory. Go and check it.
    pref.set_preferences(pdict)

    # lets update the preferences. This would automatically update 
    # preferences_test.py file, you can verify that. 
    pref.update_preferences({'preference 1': 2})

    # lets get some preferences. This would return the value of the preference if
    # it is defined or default value if it is not.
    print pref.get('preference 1')

    # In some cases we must use raw strings. This is most likely needed when
    # working with paths in a windows systems or when a preference includes
    # especial characters. That's how to do it ...
    pref.update_preferences({'my path': " r'C:\Users\Me\Desktop' "})

    # Sometimes preferences to change dynamically or to be evaluated real time.
    # This also can be done by using dynamic property. In this example password
    # generator preference is set using uuid module. dynamic dictionary
    # must include all modules name that must be imported upon evaluating
    # a dynamic preference
    pre = {'password generator': "str(uuid.uuid1())"}
    dyn = {'password generator': ['uuid',]}
    pref.update_preferences(preferences=pre, dynamic=dyn)

    # lets pull 'password generator' preferences twice and notice how
    # passwords are different at every pull
    print pref.get('password generator')
    print pref.get('password generator')

    # those preferences can be accessed later. Let's simulate that by creating
    # another preferences instances which will automatically detect the 
    # existance of a preferences file and connect to it
    newPref = Preferences(filename="preferences_test.py")

    # let's print 'my path' preference
    print newPref.get('my path')


不幸的是,Python 3不支持
推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有