如何在Python 2.7中编辑INI文件
我正在尝试编辑已经具有我需要的节和选项的INI配置文件。 但是我需要根据wxPython中的checkboxlist更新值。 目前一切正常:)但我觉得有更好的方法。 这是我正在使用的功能片段的一部分。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21def read_or_write_file(self, file, section, passed_option =None,
value =None, read = True):
if read:
with open(file) as configfile:
config =ConfigParser.RawConfigParser()
config.readfp(configfile)
options =config.options(section)
for option in options:
file_settings[option] =config.get(section, option)
else:
with open(file, 'r+') as configfile:
config =ConfigParser.RawConfigParser()
config.readfp(configfile)
config.set(section, passed_option, value)
with open(file, 'r+') as configfile:
config.write(configfile)
这正是我想要的方式,我告诉它我想要读或写的东西,它的工作原理。
但是我写入文件的else:部分看起来很奇怪。 我必须先编辑config,然后重写configfile中的所有内容。
有没有办法只重写我正在改变的价值?
这是我的第一个问题,所以如果我忘了提一些东西让我知道。
还有一个信息点:
- 我查看了所有文档或者至少我能找到的文档
- 这是类似的,但不完全是我需要的
如何用Python3读写INI文件?
"有没有办法只重写我正在改变的价值?" 不,因为它是一个文本文件。 当你知道你正在编写的东西与你要替换的东西完全相同时,你只能进行选择性重写。 这通常不是文本文件的情况,并且它们几乎从未被这样对待过。
我只对该功能进行了一次小型重组,以消除冗余:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18def read_or_write_file(self, file, section, passed_option =None,
value =None, read = True):
config =ConfigParser.RawConfigParser()
with open(file) as configfile:
config.readfp(configfile)
if read:
options =config.options(section)
for option in options:
file_settings[option] =config.get(section, option)
else:
config.set(section, passed_option, value)
with open(file, 'w') as configfile:
config.write(configfile)
好吧,这是有道理的,我没有意识到你不能改变这样的文本文件。 这可以解释为什么我遇到问题让它发挥作用。 那我还有一个问题。 重写整个文本文件所花费的时间真的很重要吗? 或者我应该找出一种不同的方式来实现我想要做的事情?
还谢谢你:)
一个典型的.ini文件非常小,所以我不担心写出来的时间,不。
一般来说,这是不可能的,因为文件的工作方式。 您不能将字节"插入"文件 - 您始终会覆盖当前内容。
可以仅使用相同长度的内容重写文件的一部分,例如, 当您想要将字符串"XXX"更改为"YYY"时。 但这是一种常见的做法,只是不用担心它,并在每次需要时将这些文件序列化为一个整体。
感谢您的答复! 这是有道理的,我没有意识到没有办法插入新的信息。