14.7.3.2 值类型
所有节和选项名都被处理为字符串,不过选项值可以是字符串、整数、浮点数或者布尔值。可以用多个不同的字符串值表示配置文件中的布尔值;访问时它们会被转换为True或False。下面的文件中包含了一些数值类型的例子,另外还包含所有被解析器识别为布尔值的值。
ConfigParser不会尝试去了解选项类型。而会希望应用使用正确的方法来获取所需类型的值。get()总会返回一个字符串。使用getint()可以得到整数,getfloat()得到浮点数,使用getboolean()得到布尔值。
from configparser import ConfigParser
parser = ConfigParser()
parser.read('types.ini')
print('Integers:')
for name in parser.options('ints'):
string_value = parser.get('ints',name)
value = parser.getint('ints',name)
print(' {:<12} : {!r:<7} -> {}'.format(
name,string_value,value))
print('\nFloats:')
for name in parser.options('floats'):
string_value = parser.get('floats',name)
value = parser.getfloat('floats',name)
print(' {:<12} : {!r:<7} -> {:0.2f}'.format(
name,string_value,value))
print('\nBooleans:')
for name in parser.options('booleans'):
string_value = parser.get('booleans',name)
value = parser.getboolean('booleans',name)
print(' {:<12} : {!r:<7} -> {}'.format(
name,string_value,value))
使用示例输入运行这个程序,可以生成以下结果:
可以在ConfigParser的converters参数中传入转换函数来增加定制类型转换器。每个转换器接收一个输入值,然后将它转换为适当的返回类型。
from configparser import ConfigParser
import datetime
def parse_iso_datetime(s):
print('parse_iso_datetime({!r})'.format(s))
return datetime.datetime.strptime(s,'%Y-%m-%dT%H:%M:%S.%f')
parser = ConfigParser(
converters={
'datetime':parse_iso_datetime,
}
)
parser.read('custom_types.ini')
string_value = parser['datetimes']['due_date']
value = parser.getdatetime('datetimes','due_date')
print('due_date : {!r} -> {!r}'.format(string_value,value))
增加转换器会让ConfigParser自动为这个类型创建一个获取方法,并使用converters中指定的类型名。在这个例子中,'datetime’转换器会让ConfigParser增加一个新的getdatetime()方法。
还可以向ConfigParser的子类直接增加转换器的方法。