从python 2.7.3升级到2.7.9后,停止ConfigParser为delim添加空格

时间:2015-08-23 13:34:59

标签: python delimiter spaces configparser

在被迫使用更高版本的python之后,ConfigParser现在坚持在修改配置文件时为任何delim的每一侧添加空格。

e.g。 setting = 90变为:setting = 90

这不是早期版本中的行为,我找不到控制此行为的方法,有人可以帮忙吗?

我的测试代码如下:

import ConfigParser
import os

config   = ConfigParser.ConfigParser()
cfgfile  = '/home/osmc/bin/test/config.txt'
os.system('sudo echo "[section]" > ' + cfgfile)
os.system('sudo echo "setting=0" >> ' + cfgfile)

config.read(cfgfile)
config.set('section','setting', '1' )

with open(cfgfile, 'wb') as newcfgfile:
    config.write(newcfgfile)

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以子类化并更改.write方法,从=的任意一侧删除空格:

import ConfigParser
import os


class MyConfigParser(ConfigParser.ConfigParser):
    def write(self, fp):
        """Write an .ini-format representation of the configuration state."""
        if self._defaults:
            fp.write("[%s]\n" % ConfigParser.DEFAULTSECT)
            for (key, value) in self._defaults.items():
                fp.write("%s=%s\n" % (key, str(value).replace('\n', '\n\t')))
            fp.write("\n")
        for section in self._sections:
            fp.write("[%s]\n" % section)
            for (key, value) in self._sections[section].items():
                if key == "__name__":
                    continue
                if (value is not None) or (self._optcre == self.OPTCRE):
                    key = "=".join((key, str(value).replace('\n', '\n\t')))
                fp.write("%s\n" % key)
            fp.write("\n")

config = MyConfigParser()
.....

答案 1 :(得分:0)

我遇到了这个问题,我提出了另一个解决方案here

  • 我不想替换这个函数,因为Python的未来版本可能会改变RawConfigParser的内部函数结构。
  • 我也不想在文件写完之后立即阅读该文件因为这看起来很浪费

相反,我在文件对象周围写了一个包装器,它简单地替换了#34; ="用" ="通过它写的所有行。

class EqualsSpaceRemover:
    output_file = None
    def __init__( self, new_output_file ):
        self.output_file = new_output_file

    def write( self, what ):
        self.output_file.write( what.replace( " = ", "=", 1 ) )

config.write( EqualsSpaceRemover( cfgfile ) )