如何用Python3读取和写入INI文件?

我需要用Python3读,写和创build一个INI文件。

FILE.INI

default_path = "/path/name/" default_file = "file.txt" 

Python文件:

 # read file and if not exists ini = iniFile( 'FILE.INI' ) # Get and Print Config Line "default_path" getLine = ini.default_path # Print (string)/path/name print getLine # Append new line and if exists edit this line ini.append( 'default_path' , 'var/shared/' ) ini.append( 'default_message' , 'Hey! help me!!' ) 

更新 FILE.INI

 default_path = "var/shared/" default_file = "file.txt" default_message = "Hey! help me!!" 

这可以从一开始:

 import configparser config = configparser.ConfigParser() config.read('FILE.INI') print(config['DEFAULT']['path']) # -> "/path/name/" config['DEFAULT']['path'] = '/var/shared/' # update config['DEFAULT']['default_message'] = 'Hey! help me!!' # create with open('FILE.INI', 'w') as configfile: # save config.write(configfile) 

你可以在官方的configparser文档中find更多。

这是一个完整的读取,更新和写入示例。

input文件test.ini

 [section_a] string_val = hello bool_val = false int_val = 11 pi_val = 3.14 

工作代码。

 try: from configparser import ConfigParser except ImportError: from ConfigParser import ConfigParser # ver. < 3.0 # instantiate config = ConfigParser() # parse existing file config.read('test.ini') # read values from a section string_val = config.get('section_a', 'string_val') bool_val = config.getboolean('section_a', 'bool_val') int_val = config.getint('section_a', 'int_val') float_val = config.getfloat('section_a', 'pi_val') # update existing value config.set('section_a', 'string_val', 'world') # add a new section and some values config.add_section('section_b') config.set('section_b', 'meal_val', 'spam') config.set('section_b', 'not_found_val', 404) # save to a file with open('test_update.ini', 'w') as configfile: config.write(configfile) 

输出文件test_update.ini

 [section_a] string_val = world bool_val = false int_val = 11 pi_val = 3.14 [section_b] meal_val = spam not_found_val = 404 

原始input文件保持不变。

http://docs.python.org/library/configparser.html

在这种情况下,Python的标准库可能会有帮助。

标准的ConfigParser通常需要通过config['section_name']['key'] ,这并不好玩。 稍作修改即可传递属性访问权限:

 class AttrDict(dict): def __init__(self, *args, **kwargs): super(AttrDict, self).__init__(*args, **kwargs) self.__dict__ = self 

AttrDict是一个从dict派生的类,它允许通过字典键和属性访问来访问:这意味着ax is a['x']

我们可以在ConfigParser使用这个类:

 config = configparser.ConfigParser(dict_type=AttrDict) config.read('application.ini') 

现在我们得到application.ini

 [general] key = value 

 >>> config._sections.general.key 'value' 

ConfigObj是ConfigParser的一个很好的select,它提供了更多的灵活性:

  • 嵌套部分(小节),到任何级别
  • 列表值
  • 多行值
  • string插值(replace)
  • 集成强大的validation系统,包括自动types检查/转换重复部分,并允许默认值
  • 当写出configuration文件时,ConfigObj将保留所有注释以及成员和部分的顺序
  • 处理configuration文件的许多有用的方法和选项(如'reload'方法)
  • 完整的Unicode支持

它有一些缺点:

  • 你不能设置分隔符,它必须是= …( 拉请求 )
  • 你不能有空值,你可以,但他们看起来很喜欢: fuabr =而不是只有看起来怪异和错误的fubar