python树莓派设置,树莓派Python读写配置文件--configparser库

配置文件格式

配置文件(*.ini)的基本格式如下:

[device]

type = NULL

id = 1

[comn]

protocol = 0

lenth = 400

filter_min = 120

filter_max = 400

[wifi]

ssid = user_ssid_null

psk = user_psk_null

[device]、[comn]、[wifi] 这些叫做 sections(节),每个section下面包含多个options(参数)/items(参数对,和字典的概念类似),例如:type = NULL,这里的“type”就叫做option,而(’type’,  ‘NULL’)被称为item。参数的值均是以string格式存储的。

configparser库

使用Python的configparser库来读写配置文件,configparser官方文档:

搜索ConfigParser Objects,这一节有函数详细的功能介绍,下面列一部分常用的:

cf = configparser.ConfigParser()

创建configparser实例

sections()

返回sections的列表

add_section(section)

增加一个section

remove_section(section)

删除一个section

has_section(section)

返回某个section是否存在

options(section)

返回某个section下的options列表

has_option(section, option)

返回某个section下的某个option是否存在

remove_option(section, option)

删除某个section下的某个option

read(filenames)

读取某个配置文件filenames,加载到ConfigParser实例

get(section, option)

以string格式,返回某个section下的某个option的值

getint(section, option)

以int格式,返回某个section下的某个option的值

getfloat(section, option)

以float格式,返回某个section下的某个option的值

getboolean(section, option)

以boolean格式,返回某个section下的某个option的值

set(section, option, value)

设置某个section下的某个option的值

write(fileobject)

将当前的ConfigParser实例写入到配置文件fileobject

生成配置文件

ConfigParser库在Python2和Python3中有点区别:

Python3

configparser库的首字母小写

import configparser

config = configparser.ConfigParser()

创建文件test_config_create_p3.py,复制下面的内容,保存退出

pi@raspberrypi:~ $ sudo nano test_config_create_p3.py

1 # -*- coding:utf-8 -*-

2 import configparser

3

4 config = configparser.ConfigParser()

5

6 config["device"] = {

7 'type' : 'NULL',

8 'id' : '1'

9 }

10

11 config["comn"] = {

12 'protocol' : '0',

13 'lenth' : '400',

14 'filter_min' : '50',

15 'filter_max' : '400'

16 }

17

18 config["wifi"] = {

19 'ssid' : 'user_ssid_null',

20 'psk' : 'user_psk_null'

21 }

22

23 with open('config.ini', 'w') as cf:

24 config.write(cf)

运行程序:

pi@raspberrypi:~ $ python3 test_config_create_p3.py

打开生成的配置文件config.ini:

pi@raspberrypi:~ $ sudo nano config.ini

sections和options的内容都是对的,只是section下的options的顺序与预期的不一致,不过这样也没什么问题。

f1599759d0b87d95c366106a12354f4c.png

Python2

ConfigParser库的首字母大写

import ConfigParser

config = ConfigParser.ConfigParser()

python2中只能逐条添加section和option

创建文件test_config_create_p2.py,复制下面的内容,保存退出

pi@raspberrypi:~ $ sudo nano test_config_create_p2.py

1 # -*- coding:utf-8 -*-

2 import ConfigParser

3

4 config = ConfigParser.ConfigParser()

5

6 config.add_section("device")

7 config.set("device", "type", 'NULL')

8 config.set("device", "id", '1')

9

10 config.add_section("comn")

11 config.set("comn", "protocol", '0' )

12 config.set("comn", "lenth", '400')

13 config.set("comn", "filter_min", '50' )

14 config.set("comn", "filter_max", '400' )

15

16 config.add_section("wifi")

17 config.set("wifi", "ssid", 'user_ssid_null')

18 config.set("wifi", "psk", 'user_psk_null')

19

20 with open('config.ini', 'w') as cf:

21 config.write(cf)

先删掉可能存在的config.ini文件

pi@raspberrypi:~ $ rm -f config.ini

运行程序:

pi@raspberrypi:~ $ python2 test_config_create_p2.py

打开生成的配置文件config.ini:

pi@raspberrypi:~ $ sudo nano config.ini

sections和options的内容都是对的,section下的options的顺序与预期的一致。

0ffe5e5038a5200fce1e6e092e1969b0.png

读取配置文件

读取配置参数时,先确认section是否存在,如果不存在就添加section,并写入默认配置参数。

这里使用的配置参数主要有两种类型:string和int,分别使用get(section, option)、getint(section, option)去读取参数。

读取完成后把所有的items都打印出来。

1 def GetConfig(filepath):

2 global PRODUCT_TYPE

3 global DEVICE_ID

4

5 global PROTOCOL_TYPE

6 global DB_PARAMS_LENGTH

7 global COMN_FILTER_MIN

8 global COMN_FILTER_MAX

9

10 global WIFI_SSID

11 global WIFI_PASSWORD

12

13 is_new_section = False

14

15 print('>> GetConfig()...')

16 print(filepath)

17

18 config = configparser.ConfigParser()

19 config.read(filepath)

20

21 if "wifi" not in config.sections():

22 print('>> add config >> wifi...')

23 is_new_section = True

24 config.add_section("wifi")

25 config.set("wifi", "ssid", WIFI_SSID)

26 config.set("wifi", "psk", WIFI_PASSWORD)

27 else:

28 WIFI_SSID = config.get("wifi", "ssid")

29 WIFI_PASSWORD = config.get("wifi", "psk")

30

31 if "device" not in config.sections():

32 print('>> add config >> device...')

33 is_new_section = True

34 config.add_section("device")

35 config.set("device", "type", PRODUCT_TYPE)

36 config.set("device", "id", str(DEVICE_ID))

37 else:

38 PRODUCT_TYPE = config.get("device", "type")

39 DEVICE_ID = config.getint("device", "id")

40

41 if "comn" not in config.sections():

42 print('>> add config >> comn...')

43 is_new_section = True

44 config.add_section("comn")

45 config.set("comn", "protocol", str(PROTOCOL_TYPE) )

46 config.set("comn", "lenth", str(DB_PARAMS_LENGTH))

47 config.set("comn", "filter_min", str(COMN_FILTER_MIN) )

48 config.set("comn", "filter_max", str(COMN_FILTER_MAX) )

49 else:

50 PROTOCOL_TYPE = config.get("comn", "protocol")

51 DB_PARAMS_LENGTH = config.getint("comn", "lenth")

52 COMN_FILTER_MIN = config.getint("comn", "filter_min")

53 COMN_FILTER_MAX = config.getint("comn", "filter_max")

54

55 print('>> list config items...')

56 for sections in config.sections():

57 for items in config.items(sections):

58 print(items)

59

60 if True == is_new_section:

61 print('>> new section added, write to config file...')

62 with open(filepath, 'w+') as cf:

63 config.write(cf)

修改配置文件

用set(section, option, value)来设置参数值,可以把所有参数值都用str()强制转换一下。

写入之前先把所有的items都打印出来。

1 def SetConfig(filepath):

2 global WIFI_SSID

3 global WIFI_PASSWORD

4 global PRODUCT_TYPE

5 global DEVICE_ID

6 global PROTOCOL_TYPE

7 global DB_PARAMS_LENGTH

8 global COMN_FILTER_MIN

9 global COMN_FILTER_MAX

10

11 print('>> SetConfig()...')

12 print(filepath)

13

14 config = configparser.ConfigParser()

15 config.read(CONFIG_FILE)

16

17 if "device" not in config.sections():

18 config.add_section("device")

19 if "comn" not in config.sections():

20 config.add_section("comn")

21 if "wifi" not in config.sections():

22 config.add_section("wifi")

23

24 config.set("wifi", "ssid", str(WIFI_SSID))

25 config.set("wifi", "psk", str(WIFI_PASSWORD))

26

27 config.set("device", "type", str(PRODUCT_TYPE))

28 config.set("device", "id", str(DEVICE_ID))

29

30 config.set("comn", "protocol", str(PROTOCOL_TYPE) )

31 config.set("comn", "lenth", str(DB_PARAMS_LENGTH))

32 config.set("comn", "filter_min", str(COMN_FILTER_MIN) )

33 config.set("comn", "filter_max", str(COMN_FILTER_MAX) )

34

35 print('>> list config items...')

36 for sections in config.sections():

37 for items in config.items(sections):

38 print(items)

39

40 print('>> write to config file...')

41 with open(CONFIG_FILE, 'w+') as cf:

42 config.write(cf)

运行测试

使用Python3进行测试(如果用Python2,只需要把库的首字母改成大写的)

创建测试程序test_config.py。SetConfig()、GetConfig()参考上面,这里为了便于阅读省略了。

pi@raspberrypi:~ $ sudo nano test_config.py

这个测试函数里先是把默认的配置参数写入到配置文件并读取,然后再修改配置参数,重新写入到配置文件并读取。程序会打印即将写入配置文件的参数,还有从配置文件中读取到的参数。

1 # -*- coding:utf-8 -*-

2 import configparser

3

4 CONFIG_FILE = '/home/pi/config.ini'

5

6 PRODUCT_TYPE = 'NULL'

7 DEVICE_ID = 1

8 PROTOCOL_TYPE = 0

9 DB_PARAMS_LENGTH = 400

10 COMN_FILTER_MIN = 50

11 COMN_FILTER_MAX = 400

12 WIFI_SSID = 'user_ssid_null'

13 WIFI_PASSWORD = 'user_psk_null'

14

15 #----

16 def GetConfig(filepath):

17 ####

18

19 #----

20 def SetConfig(filepath):

21 ####

22

23 #----

24 def main():

25 global CONFIG_FILE

26

27 global WIFI_SSID

28 global WIFI_PASSWORD

29 global PRODUCT_TYPE

30 global DEVICE_ID

31 global PROTOCOL_TYPE

32 global DB_PARAMS_LENGTH

33 global COMN_FILTER_MIN

34 global COMN_FILTER_MAX

35

36 SetConfig(CONFIG_FILE)

37 GetConfig(CONFIG_FILE)

38

39 PRODUCT_TYPE = 'ANOTHER_TYPE'

40 DEVICE_ID = 2

41

42 PROTOCOL_TYPE = 1

43 DB_PARAMS_LENGTH = 300

44 COMN_FILTER_MIN = 100

45 COMN_FILTER_MAX = 300

46

47 WIFI_SSID = 'another_user_ssid_null'

48 WIFI_PASSWORD = 'another_user_psk_null'

49

50 SetConfig(CONFIG_FILE)

51 GetConfig(CONFIG_FILE)

52

53 if __name__ == '__main__':

54 main()

用Python3运行

pi@raspberrypi:~ $ python3 test_config.py

首先是写入默认配置参数并读取的结果,与预期一致:

9dbd6c311f0e09a1f381304d6b3b4152.png

之后是修改了配置参数,写入并读取的结果,与预期一致:

055bacfb6094cb0f2fc2fa4a2af134ab.png

标签:树莓,set,option,配置文件,Python,section,global,comn,config

来源: https://www.cnblogs.com/hotwater99/p/12758719.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值