比较从Python的config ini文件中读取的字符串?

sauutmhj  于 2023-01-03  发布在  Python
关注(0)|答案(3)|浏览(107)

我有一个类似下面的config.ini文件:

[LABEL]
NAME = "eventName"

我把它读进了我的python代码中,如下所示,然而,当我把它和完全相同的字符串进行比较时,结果是False,我想知道我是否应该用不同的方式来读它,或者我需要做些别的事情?

import configparser

config = configparser.ConfigParser()
config.read('config.ini')
my_label_name = config['LABEL']['name']

print("My label is: ", my_label_name, " and has type of: ", type(my_label_name))
My label is:  "eventName"  and has type of:  <class 'str'>

print(my_label_name == "eventName")
False
col17t5w

col17t5w1#

默认情况下,配置解析器将配置文件中的内容作为字符串读取。在配置文件中,不需要单引号和双引号来表示字符串。引号本身将被视为单独的字符。
在你的程序中,如果你观察得当,你可以看到值是用引号打印出来的。所以***eventName***和***“eventName”是不一样的。这就是为什么你得到的结果是***False。你的程序的屏幕截图如下所示。

因此,解决方案是从配置文件中删除双引号,或者在阅读值时删除双引号。
更新后的配置文件如下所示。

[LABEL]
NAME = eventName

如果你不能从配置文件中删除双引号,你需要在程序中处理它。下面给出了示例代码片段。

import ast
import configparser

config = configparser.ConfigParser()
config.read('config.ini')

# Modify here
#my_label_name = config['LABEL']['name']
my_label_name = ast.literal_eval(config['LABEL']['name'])

print("My label is: ", my_label_name, " and has type of: ", type(my_label_name))

print(my_label_name == "eventName")
0qx6xfy6

0qx6xfy62#

我想你应该把这句话改一下:

my_label_name = config['LABEL']['name']

改为:

my_label_name = ast.literal_eval(config['LABEL']['name'])
lb3vh1jj

lb3vh1jj3#

config['LABEL']['name']的内容是一个包含"eventName"并带有双引号的字符串。
单引号(')和双引号(")在INI中是不必要的,因为在INI中所有内容都是字符串。
演示:

from io import StringIO
import configparser

raw_config = """\
[LABEL]
NAME = "eventName"
"""

with StringIO(raw_config) as buf:
    config = configparser.ConfigParser()
    config.read_file(buf)

print(config["LABEL"]["NAME"])  # "eventName"

相关问题