使用ConfigParser替换已经存在的字符串

时间:2010-09-06 01:52:17

标签: python configparser

我正在使用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)

1 个答案:

答案 0 :(得分:1)

r+选项(在open中的with中)告诉Python保留文件的先前内容,只是覆盖将写入其中的特定字节但保留所有内容别人一个人使用w打开完成覆盖的文件,这似乎就是您应该在此处执行的操作。覆盖现有文件中的所选字节很少是您想要做的事情,特别是对于 text 文件,您更可能希望将其视为文本行序列,而不是字节! (它在非常特殊的情况下很有用,主要涉及大型二进制文件,其中字节视图可能有一定意义)。

我们喜欢查看文本文件的“在线组织”没有反映在底层文件系统中(至少在目前流行的任何操作系统上,至少在黑暗的过去 some

因此,“就地覆盖文件的一部分”(文件包含不同长度的文本行)成为一个很大的问题。如果您需要这样做,顺便说一下,请考虑标准Python库的fileinput模块,它模拟了这个经常需要的但正在运行的文件系统的操作非常有效。但是,在这种情况下,对于简单的总覆盖似乎完全正确,它对你没什么帮助; - )。