能否从字符串或列表中读取ConfigParser
的配置?
而不需要在文件系统上创建任何临时文件。
或者
是否有类似的解决方案?
能否从字符串或列表中读取ConfigParser
的配置?
而不需要在文件系统上创建任何临时文件。
或者
是否有类似的解决方案?
您可以使用类似文件的缓冲区:
Python 3解决方案。import configparser
import io
s_config = """
[example]
is_real: False
"""
buf = io.StringIO(s_config)
config = configparser.ConfigParser()
config.read_file(buf)
print(config.getboolean('example', 'is_real'))
在Python 2.7中,这个实现是正确的:
import ConfigParser
import StringIO
s_config = """
[example]
is_real: False
"""
buf = StringIO.StringIO(s_config)
config = ConfigParser.ConfigParser()
config.readfp(buf)
print config.getboolean('example', 'is_real')
虽然问题被标记为 python-2.7,但出于完整性的考虑:自3.2起,您可以使用 ConfigParser 函数 read_string(),因此您不再需要使用 StringIO 方法。
import configparser
s_config = """
[example]
is_real: False
"""
config = configparser.ConfigParser()
config.read_string(s_config)
print(config.getboolean('example', 'is_real'))
read_string
和read_dict
函数。但它不支持从列表中读取数据。#!/usr/bin/env python3
import configparser
cfg_data = {
'mysql': {'host': 'localhost', 'user': 'user7',
'passwd': 's$cret', 'db': 'ydb'}
}
config = configparser.ConfigParser()
config.read_dict(cfg_data)
host = config['mysql']['host']
user = config['mysql']['user']
passwd = config['mysql']['passwd']
db = config['mysql']['db']
print(f'Host: {host}')
print(f'User: {user}')
print(f'Password: {passwd}')
print(f'Database: {db}')
cStringIO
对象不是buffer
。字符串 是缓冲区,但缓冲区不能用于需要类似于“文件”的对象的地方;cStringIO
包装 一个buffer
以使其表现得像一个file
。此外,您的示例并未演示cStringIO
如何像文件一样运行;getvalue
是cStringIO
实例特有的方法,但文件没有它。 - lanzzconfig.readfp
已被弃用,建议使用config.read_file
自Python 3.2起。 - mindthief