标签: configparser

Python ConfigParser-跨模块使用

我试图了解实现Python的ConfigParser的最佳方法,以便多个程序模块都可以访问元素。我正在使用:-

import ConfigParser
import os.path

config = ConfigParser.RawConfigParser()

config.add_section('paths')
homedir = os.path.expanduser('~')
config.set('paths', 'user', os.path.join(homedir, 'users'))
[snip]
config.read(configfile)
Run Code Online (Sandbox Code Playgroud)

在最后一行引用了configfile变量。这必须传递到Config模块,以便用户可以覆盖默认配置文件。我应该如何以其他模块可以使用config.get(spam,eggs)的方式在模块/类中实现此功能?

python python-module configparser

5
推荐指数
1
解决办法
1552
查看次数

如何在 Python 中加载配置文件并能够使用点表示法(属性)访问值?

我正在寻找一种解决方案,允许我使用配置文件数据的属性。

我希望能够做这样的事情:

config = Config('config.ini')
print config.section1.user
print config.section2.password
Run Code Online (Sandbox Code Playgroud)

我确实知道 ConfigParser 允许我做类似的事情,config['section1']['user']但这太丑陋了,我们不能做得更好吗?

该解决方案必须适用于 Python 2.5 或更高版本。

python ini configparser

5
推荐指数
1
解决办法
3796
查看次数

使用ConfigParser多次指定相同的选项

我想使用python ConfigParser模块读取配置文件:

[asection]
option_a = first_value
option_a = second_value
Run Code Online (Sandbox Code Playgroud)

我希望能够获得为选项“ option_a”指定的值的列表。我尝试了以下显而易见的方法:

test = """[asection]
option_a = first_value
option_a = second_value
"""
import ConfigParser, StringIO
f = StringIO.StringIO(test)
parser = ConfigParser.ConfigParser()
parser.readfp(f)
print parser.items()
Run Code Online (Sandbox Code Playgroud)

哪个输出:

[('option_a', 'second_value')]
Run Code Online (Sandbox Code Playgroud)

当我希望:

[('option_a', 'first_value'), ('option_a', 'second_value')]
Run Code Online (Sandbox Code Playgroud)

或者,甚至更好:

[('option_a', ['first_value', 'second_value'])]
Run Code Online (Sandbox Code Playgroud)

有没有办法用ConfigParser做到这一点?另一个主意?

python configparser

5
推荐指数
1
解决办法
1064
查看次数

使用全局选项解析rsyncd配置文件时的ConfigParser.MissingSectionHeaderError

配置文件通常需要每个部分的节头.在rsyncd配置文件中,全局部分不需要显式地具有节头.rsyncd.conf文件的示例:

[rsyncd.conf]

# GLOBAL OPTIONS

path            = /data/ftp
pid file        = /var/run/rsyncdpid.pid
syslog facility = local3
uid             = rsync
gid             = rsync
read only       = true
use chroot      = true

# MODULE OPTIONS
[mod1]
...
Run Code Online (Sandbox Code Playgroud)

如何使用python解析这样的配置文件ConfigParser?执行以下操作会产生一个错误:

>>> import ConfigParser
>>> cp = ConfigParser.ConfigParser()
>>> cp.read("rsyncd.conf")

# Error: ConfigParser.MissingSectionHeaderError: File contains no section headers.
Run Code Online (Sandbox Code Playgroud)

python rsync configparser

5
推荐指数
2
解决办法
8305
查看次数

在读取多个配置文件时,ConfigParser会覆盖以前的文件,为什么?

所以我想首先说我一直在寻找SO的答案,并且找不到任何有用的东西.我也查看了Python的文档,但未能找到有用的东西.我的上一个问题有点懒,收到负面反馈,所以我尽我所能在这里提出一个简单明了的问题.一如既往,提前感谢您的帮助!

那么,有人可以解释我在Python的ConfigParser中遇到的奇怪行为.我有两个不同的配置文件,每个都有一个Section 1.这两个文件具有不同数量的选项,但覆盖的选项数量较少.这是代码和输出:

第一个配置文件:test1.ini

[Section 1]
Option 1 : One
Option 2 : Two
Option 3 : None
Option 4 : Four
Run Code Online (Sandbox Code Playgroud)

第二个配置文件:test2.ini

[Section 1]
Option 1 : One
Option 2 : None
Option 3 : Three
Run Code Online (Sandbox Code Playgroud)

读取配置文件的驱动程序

from ConfigParser import SafeConfigParser

parser = SafeConfigParser()

def ParseThis(file, section):
    parser.read(file)

    for option in parser.options(section):
        print "\t" + option
        try:
            if parser.get(section, option) != 'None':
                print option + ": " + parser.get(section, option)
            else:
                print option + ": Option doesn't …
Run Code Online (Sandbox Code Playgroud)

python configparser

5
推荐指数
1
解决办法
5599
查看次数

python RawConfigParser

我正在使用RawConfigParser来读取和更新 ini 样式的配置文件。这在标准配置中完全没有问题。我的问题是我在同一个脚本中读取不同的配置文件。无需过多赘述,当我阅读第二个配置文件时,它的值与第一个 ini 文件合并。

两个 ini 文件的原始内容

infile_1.ini
[section]
option = Original value
extraoption = not in ini file 2

inifile_2.ini
[section]
option = Original value
Run Code Online (Sandbox Code Playgroud)

这是我用来更改 ini 文件内容的代码。这是重现问题的一小段代码

import ConfigParser

class status_file:
   myConfig = ConfigParser.RawConfigParser()
   myConfig.optionxform = str

   def __init__(self, str_statusfile):
      self.myConfig.read( str_statusfile)
      self.statusfile = str_statusfile

   def option(self, new_value):
      self.myConfig.set("section","option",new_value)
      with open( self.statusfile, "w") as ini_out:
            self.myConfig.write( ini_out )


statusfiles = ['inifile_1.ini', 'inifile_2.ini']
for myStatus in statusfiles:
   myConfig = status_file(myStatus)
   myConfig.option("Something new")
Run Code Online (Sandbox Code Playgroud)

执行此代码后,ini 文件的内容已按预期更改。但是在第二个 ini 文件中,合并了第一个 …

python class configuration-files configparser

5
推荐指数
1
解决办法
3380
查看次数

Python3:作为Cronjob运行时的configparser KeyError

我有一个简单的python3脚本,当我从控制台运行它时,它可以工作:

import configparser

file = 'config_test.ini'
config = configparser.ConfigParser()
config.read(file)
for key in config['test_section']: print(key)
Run Code Online (Sandbox Code Playgroud)

被调用的ini文件看起来像这样:

[test_section]
testkey1 = 5
testkey2 = 42878180
testkey3 = WR50MS10:1100012307
testkey4 = WR50MS04:1100012010
testkex5 = 192.168.200.168
Run Code Online (Sandbox Code Playgroud)

并且脚本运行正常并返回ini文件的五个键.

不,我每分钟都将它配置为cronjob(在Raspberry Pi上运行rasbian)通过:

* * * * * python3 /home/pi/s0/testconfig.py >> /tmp/cron_debug_log.log 2>&1
Run Code Online (Sandbox Code Playgroud)

并且日志看起来像这样:

Traceback (most recent call last):
  File "/home/pi/s0/testconfig.py", line 7, in <module>
    for key in config['test_section']: print(key)
  File "/usr/lib/python3.2/configparser.py", line 941, in __getitem__
    raise KeyError(key)
KeyError: 'test_section'
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了亲切的问候

cron configparser python-3.x

5
推荐指数
1
解决办法
5271
查看次数

如何使 ConfigParser 返回默认值而不是引发 NoOptionError?

我有一个配置文件,其中定义了一些选项。有时,如果找不到请求的选项,我想忽略错误并返回None

setting.cfg

[Set]
ip=some_ip
verify=yes     #if verify does not exist here --> verify=None
Run Code Online (Sandbox Code Playgroud)

test.py

import sys
import ConfigParser

file="setting.cfg"

class ReadFile:
   def read_cfg_file(self):
      configParser = ConfigParser.RawConfigParser(allow_no_value=True)
      if os.path.isfile(file):
          configParser.read(file)
      else:
          sys.exit(1)
      try:
          verify = configParser.get('Set', 'verify')
      except ConfigParser.NoOptionError:
          pass

      return verify,and,lots,of,other,values
Run Code Online (Sandbox Code Playgroud)

如果我这样处理它,我将无法返回值,因为如果'verify'找不到该选项,它就会简单地传递。

如果找不到选项,有什么方法可以忽略错误,而是返回None

例如,这样的事情:

verify = configParser.get('Set', 'verify')
if not verify:
    verify=False
Run Code Online (Sandbox Code Playgroud)

python exception configparser python-2.7

5
推荐指数
2
解决办法
7582
查看次数

使用配置文件指定要在 Python 中执行的操作

我正在尝试使用配置文件、python 和 ConfigParser 构建动态操作。我对 Python 还很陌生(两周前),所以我不确定这是否可能,这就是我想问的原因。

这是一个示例配置文件:

[General]
Volume File = C:\Users\O\Desktop\Sanjeev\Python\Solution\volume.xlsx
New Variables File = C:\Users\O\Desktop\Sanjeev\Python\Solution\newvar.xlsx
Desired Variable Name = Price,Age
Merging Variables = Category,State
[Operations]
Operation1 = Price*Volume,Revenue
Operation2 = Revenue/Age,Annual Revenue
Run Code Online (Sandbox Code Playgroud)

因此,在这里我将使用合并变量来合并第一个和第二个数据集,保留并可能聚合所需的变量。然后,根据操作部分中指定的操作,我将执行它们并将它们存储在与列表中第二项同名的变量中。

我想在配置文件而不是 python 脚本中指定这些操作的原因是因为这些操作的数量和类型会有所不同。我需要创建动态代码,该代码能够解析配置文件中的此选项,就好像它是代码一样并执行它。

我想要一些关于如何开始的指导。

python config configuration-files configparser

5
推荐指数
1
解决办法
1678
查看次数

python 3 和 python 2 中的 ConfigParser

我一直在慢慢地从 py2 -> py3 过渡,但我遇到了一个我无法完全解决的问题(尽管我确定问题是微不足道的)。当我执行下面的代码时,配置文件似乎没有任何部分:(

我哪里误会了?

请注意,我确实从 python 2 脚本中重用了这段代码(用新的 configparser.ConfigParser 替换了旧的 ConfigParser.SafeConfigParser)。我不认为这个事实是相关的,但也许是?显然,我不知道:)

这是项目/main.py

import inspect
import os
import utilities.utilities

def main():
    config_ini_path = os.path.abspath(inspect.getfile(inspect.currentframe()).split('.py')[0] + '_config.ini'
    print(config_ini_path)
    config = utilities.utilies.get_config(config_ini_path)
    print(config.sections())

if __name__ == "__main__":
    main()
Run Code Online (Sandbox Code Playgroud)

这是项目/实用程序/实用程序.py:

import os
import configparser
import inspect
import sys

def get_config(config_file_path=os.path.abspath(inspect.getfile(inspect.currentframe()).split('.py')[0]) + '_config.ini'):
    parser = configparser.ConfigParser()
    if os.path.exists(config_file_path):
        with open(config_file_path, 'r') as config_file:
            parser.read(config_file)
            return parser
    else:
        print('FAILED TO GET CONFIG')
        sys.exit()

def set_config(parser, config_file_path):
    if os.path.exists(config_file_path):
        with open(config_file_path, 'w') as config_file:
        parser.write(config_file) …
Run Code Online (Sandbox Code Playgroud)

python configparser python-3.x

5
推荐指数
1
解决办法
3829
查看次数