Windows操作系统经常使用ini文件保存软件配置信息,例如微信中的plugin_info.ini,我来为大家科普一下关于python学习笔记文件读写?以下内容希望对你有帮助!
python学习笔记文件读写
Windows操作系统经常使用ini文件保存软件配置信息,例如微信中的plugin_info.ini。
ini文件包含一个或者多个section,每个section包含一个或者多个格式为"key=value"的键值对。
默认情况下小节名对大小写敏感而键值对大小写不敏感
键和值开头和末尾的空格会被移除。
注释使用英文 # 或者 ;
Python内置configparser 类可以读取和写入这种文件。
[Simple Values]
key=value
spaces in keys=allowed
spaces in values=allowed as well
spaces around the delimiter = obviously
you can also use : to delimit keys from values
[All Values Are Strings]
values like this: 1000000
or this: 3.14159265359
are they treated as numbers? : no
integers, floats and booleans are held as: strings
can use the API to get converted values directly: true
[Multiline Values]
chorus: I'm a lumberjack, and I'm okay
I sleep all night and I work all day
[No Values]
key_without_value
empty string value here =
[You can use comments]
# like this
; or this
构造一个字典对象,其中包含要写到ini文件中的键值对
import configparser
config = configparser.ConfigParser()
config['DEFAULT'] = {'ServerAliveInterval': '45',
'Compression': 'yes',
'CompressionLevel': '9'}
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Port'] = '50022' # mutates the parser
topsecret['ForwardX11'] = 'no' # same here
config['DEFAULT']['ForwardX11'] = 'yes'
with open(r'd:\app.ini', 'w') as configfile:
config.write(configfile)
执行后得到的ini文件
[DEFAULT]
serveraliveinterval = 45
compression = yes
compressionlevel = 9
forwardx11 = yes
[bitbucket.org]
user = hg
[topsecret.server.com]
port = 50022
forwardx11 = no
configparser并不会猜测配置文件中值的类型,而总是将它们在内部存储为字符串,你需要自己进行强制转换。
但是bool('False') 仍然会是 True。 为解决这个问题configparser还提供了 getboolean()。 这个方法对大小写不敏感并可识别 'yes'/'no', 'on'/'off', 'true'/'false' 和 '1'/'0' 1 等布尔值。
此外configparser还提供了getint() 和 getfloat() 方法
config = configparser.ConfigParser()
config.read(r'd:\app.ini')
config.sections()
for key in config['bitbucket.org']:
print(key)
config['DEFAULT']['Compression']
topsecret = config['topsecret.server.com']
topsecret['ForwardX11']
import configparser
config = configparser.ConfigParser()
config.add_section("baidu.com")
config["baidu.com"]["port"] = '80'
with open(r'd:\app.ini', 'a') as configfile:
config.write(configfile)
此外,还有删除section方法:remove_section(section)
删除option方法:remove_option(section, option)
注意configparser不能识别键值对中的百分号%
例如如果compressionlevel的值为"%9"
[DEFAULT]
serveraliveinterval = 45
compression = yes
compressionlevel = %9
forwardx11 = yes
那么执行下面的代码时就会抛出异常
print(config["DEFAULT"]["compressionlevel"])
InterpolationSyntaxError: '%' must be followed by '%' or '(', found: '%9'
解决方法是使用RawConfigParser而不是configparser
config = configparser.RawConfigParser()