我正在使用ConfigParser将简单设置保存到.ini文件,其中一个设置是目录。每当我使用较短的目录字符串(例如D:/Documents/Data
)替换目录字符串(例如D:/
)时,其余字符将在选项下方放置两行。所以.ini文件现在看起来像这样:
[Settings]
directory = D:/
Documents/Data
我做错了什么?这是我的代码:
import ConfigParser
class Settings():
self.config = ConfigParser.ConfigParser()
def SetDirectory(self, dir): #dir is the directory string
self.config.readfp(open('settings.ini'))
self.config.set('Settings', 'directory', dir)
with open('settings.ini', 'r+') as configfile: self.config.write(configfile)
答案 0 :(得分:1)
r+
选项(在open
中的with
中)告诉Python保留文件的先前内容,只是覆盖将写入其中的特定字节但保留所有内容别人一个人使用w
打开完成覆盖的文件,这似乎就是您应该在此处执行的操作。覆盖现有文件中的所选字节很少是您想要做的事情,特别是对于 text 文件,您更可能希望将其视为文本行序列,而不是字节! (它在非常特殊的情况下很有用,主要涉及大型二进制文件,其中字节视图可能有一定意义)。
我们喜欢查看文本文件的“在线组织”没有反映在底层文件系统中(至少在目前流行的任何操作系统上,至少在黑暗的过去 some
因此,“就地覆盖文件的一部分”(文件包含不同长度的文本行)成为一个很大的问题。如果您需要这样做,顺便说一下,请考虑标准Python库的fileinput
模块,它模拟了这个经常需要的但正在运行的文件系统的操作非常有效。但是,在这种情况下,对于简单的总覆盖似乎完全正确,它对你没什么帮助; - )。