ConfigParser
是否可能保持INI
配置文件的格式?我有一些配置文件,其中包含注解和特定的section
/option
名称,如果读取并更改文件的内容,ConfigParser
会重新格式化它(我可以解决section
/option
名称)。
我熟悉ConfigParser
的工作方式(将键/值对读取到dict
并在更改后将其转储到文件)。但我感兴趣的是,是否有解决方案可以保持INI
文件中的原始格式和注解。
- 示例:**
- 一米十纳一x**
# Comment line
; Other Comment line
[My-Section]
Test-option = Test-Variable
- 一米十一米一**
import configparser as cp
parser: cp.ConfigParser = cp.ConfigParser()
parser.read("test.ini")
parser.set("My-Section", "New-Test_option", "TEST")
with open("test.ini", "w") as configfile:
parser.write(configfile)
- 运行脚本后
test.ini
**
- 运行脚本后
[My-Section]
test-option = Test-Variable
new-test_option = TEST
正如你在上面看到的,注解行(两种类型的注解)都被删除了。此外,option
名称也被重新格式化了。
如果我在源代码中添加以下代码行,那么我可以保留options
的格式,但注解仍然会被删除:
parser.optionxform = lambda option: option
因此,test.ini
文件在运行以上行的脚本后:
[My-Section]
Test-option = Test-Variable
New-Test_option = TEST
- 所以我的问题:**
- 修改
INI
文件后,是否可以保留其中的注解? - 是否可以保持文件的格式,例如:空格、制表符、新行等?
- 注:**
- 我已经检查了
RawConfigParser
模块,但正如我所看到的,它也不支持格式保持。
1条答案
按热度按时间dxxyhpgq1#
来自文档:
回写配置时,不会保留原始配置文件中的注解。
不考虑行内注解,尽管可以使用相同的方法来查找、关联和恢复行内注解。
使用正则表达式查找注解,然后将其与节关联。
使用ConfigParser进行更改。
恢复注解。
test.ini
comments
命令如下所示:更改后的test.ini
最后,这里是ConfigParser的一个子类,重写了_read和_write_section方法,以便查找/关联/恢复注解如果它们 * 出现 * 在节之前。