[main]
user_name = username
password = [k!:SU`T&m5@3D\\7Z
from configparser import ConfigParser
config = ConfigParser()
config.read(CONFIG.ini file path)
print(config["main"]["user_name"])
print(config["main"]["password"])
output:
username
[k!:SU`T&m5@3D\\\\7Z
After reading the file, the parsed password is not same as file input password.
The password is still the same, but its representation is confusing you. The problem is the "\7" which could be interpreted as a special character. To avoid any confusion, python writes a double backslash. To see the difference, you may write the following two strings:
string_1 = "\7"
string_2 = r"\7"
print(string_1)
print(string_2)
print(repr(string_1))
print(repr(string_2))
I hope this helps you to understand the difference in what python displays.
Edit:
There should not be an extra backlash. Please try the following:
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: Please try the edited code. It should create your ini file and read in the correct password as tested with the assertion.
Edit3: I just copy pasted your ini file and ran your lines and get the correct output without extra slashes:
username
[k!:SU`T&m5@3D\\7Z
So could you please show the output of the following lines:
import platform
import sys
print(sys.version)
print(platform.platform())
print(sys.getdefaultencoding())
which in my case says:
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
Sorry, I cannot help you further, because I cannot reproduce your error.