我正在使用一个文件,我有一个名为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()
答案 0 :(得分:9)
我遇到了这个问题,我想出了一个额外的解决方案。
相反,我在文件对象周围写了一个包装器,它简单地替换了#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
格式已硬编码到函数中。我认为你的选择是:
RawConfigParser
的{{1}}方法
如果您100%确定选项1不可用,则可以选择执行选项3:
write
答案 2 :(得分:0)
我知道这是一个非常古老的问题,但最新版本的 Configparser
有简单的解决方案。只需使用:
parser.write(file_pointer, space_around_delimiters=Fasle)