从 python 2.7.3 升级到 2.7.9 后停止 ConfigParser 向 delims 添加空格
Stop ConfigParser adding spaces to delims after upgrade from python 2.7.3 to 2.7.9
在被迫使用更高版本的 python 之后,ConfigParser 现在坚持在修改配置文件时在任何 delims 的每一侧添加空格。
例如
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)
提前致谢。
您可以子类化并更改 .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()
.....
我 运行 解决了这个问题,我想出了一个额外的解决方案,如 here.
- 我不想替换该函数,因为 Python 的未来版本可能会更改 RawConfigParser 的内部函数结构。
- 我也不想在文件写入后立即读回,因为这看起来很浪费
相反,我围绕文件对象编写了一个包装器,它只是在通过它编写的所有行中将“=”替换为“=”。
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 ) )
在被迫使用更高版本的 python 之后,ConfigParser 现在坚持在修改配置文件时在任何 delims 的每一侧添加空格。
例如 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)
提前致谢。
您可以子类化并更改 .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()
.....
我 运行 解决了这个问题,我想出了一个额外的解决方案,如 here.
- 我不想替换该函数,因为 Python 的未来版本可能会更改 RawConfigParser 的内部函数结构。
- 我也不想在文件写入后立即读回,因为这看起来很浪费
相反,我围绕文件对象编写了一个包装器,它只是在通过它编写的所有行中将“=”替换为“=”。
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 ) )