使用带有特殊字符的密码的 ini 文件使用 python configparser

Using ini file with password having special characters using python configparser

new.ini 文件

[main]
user_name = username
password = [k!:SU`T&m5@3D\7Z

python代码

from configparser import ConfigParser
config = ConfigParser()
config.read(CONFIG.ini file path)
print(config["main"]["user_name"])
print(config["main"]["password"])

输出:

username
[k!:SU`T&m5@3D\\7Z

读取文件后,解析出的密码与文件输入密码不一致。 帮助将不胜感激。谢谢

密码仍然相同,但它的表示形式让您感到困惑。 问题是“\7”可能被解释为特殊字符。为了避免混淆,python 写了一个双反斜杠。 要查看差异,您可以编写以下两个字符串:

string_1 = ""
string_2 = r""
print(string_1)
print(string_2)

print(repr(string_1))
print(repr(string_2))

我希望这能帮助您理解 python 显示的差异。

编辑:

不应该有额外的反弹。请尝试以下操作:

import configparser

content = r"""
[main]
user_name = username
password = [k!:SU`T&m5@3D\7Z
"""
with open('test.ini', mode='w') as file:
    file.write(content)
parser = configparser.ConfigParser()
with open('test.ini', mode='r') as file:
    parser.read_file(file)
assert parser['main']['password'] == r"[k!:SU`T&m5@3D\7Z"

Edit2:请尝试编辑后的代码。它应该创建您的 ini 文件并读入正确的密码,如断言所测试的那样。

编辑3: 我只是复制粘贴了你的 ini 文件和 运行 你的行并获得正确的输出而没有额外的斜线:

username
[k!:SU`T&m5@3D\7Z

那么你能否显示以下行的输出:

import platform
import sys

print(sys.version)
print(platform.platform())
print(sys.getdefaultencoding())

在我的例子中说:

3.8.5 (default, Sep  4 2020, 07:30:14) 
[GCC 7.3.0]
Linux-4.12.14-lp151.28.91-default-x86_64-with-glibc2.10
utf-8

抱歉,我无法为您提供更多帮助,因为我无法重现您的错误。