如何在INI文件中编写时删除空格 - Python

时间:2012-12-24 12:00:43

标签: python python-2.7 configparser

我正在使用一个文件,我有一个名为DIR的部分,其中包含路径。 EX:

[DIR]
DirTo=D:\Ashish\Jab Tak hai Jaan
DirBackup = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Backup
ErrorDir = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Error

CombinerDir = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Combiner
DirFrom=D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\In
PidFileDIR = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Pid
LogDir = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Log   
TempDir = D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Temp

现在我想替换我已经完成它的路径,但是当我在新写入的.ini文件中替换它在分隔符之前和之前给出空格时。例如:DirTo = D:\Parser\Backup。我如何删除这些空格?

代码:

def changeINIfile():
    config=ConfigParser.RawConfigParser(allow_no_value=False)
    config.optionxform=lambda option: option
    cfgfile=open(r"D:\Parser\ERICSSON_CSCORE_STANDARD_VMS\Windows\opx_PAR_GEN_660_ERICSSON_CSCORE_STANDARD_PM_VMS_MALAYSIA.ini","w")
    config.set('DIR','DirTo','D:\Ashish\Jab Tak hai Jaan')
    config.optionxform=str
    config.write(cfgfile)
    cfgfile.close()

3 个答案:

答案 0 :(得分:9)

我遇到了这个问题,我想出了一个额外的解决方案。

  • 我不想替换这个函数,因为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 ) )

答案 1 :(得分:0)

以下是RawConfigParser.write的定义:

def write(self, fp):
    """Write an .ini-format representation of the configuration state."""
    if self._defaults:
        fp.write("[%s]\n" % 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__":
                fp.write("%s = %s\n" %
                         (key, str(value).replace('\n', '\n\t')))
        fp.write("\n")

如您所见,%s = %s\n格式已硬编码到函数中。我认为你的选择是:

  1. 使用带有等于
  2. 的空格的INI文件
  3. 使用您自己的
  4. 覆盖RawConfigParser的{​​{1}}方法
  5. 编写文件,读取文件,删除空格,然后重新编写
  6. 如果您100%确定选项1不可用,则可以选择执行选项3:

    write

答案 2 :(得分:0)

我知道这是一个非常古老的问题,但最新版本的 Configparser 有简单的解决方案。只需使用:

<块引用>

parser.write(file_pointer, space_around_delimiters=Fasle)