2013-10-31 43 views
1

我正在將部分和選項和值從一個.ini文件複製到另一個,以便將多個.ini文件合併爲一個文件,其中RawConfigParser未使用RawConfigParser寫入空字符串

在一個源.ini我有這一點,希望它能複製:

[foo] 
bar="" 

但是,我得到的結果是

[foo] 
bar= 

失敗我的要求,因爲在封閉的外部程序我測試不會用這個ini。

我試過'""',\"\","\"\""但沒有成功。 (編輯:注意在輸出''不會爲我做任何不太妙,它需要""

我的代碼是:

import ConfigParser 

inireader = ConfigParser.RawConfigParser() 
inireader.read('source.ini') 

iniwriter=ConfigParser.RawConfigParser() 
for section_name in inireader.sections(): 
    for name, value in inireader.items(section_name): 
     print name,value 
     if not iniwriter.has_section(section_name): 
      iniwriter.add_section(section_name) 
     iniwriter.set(section_name, name, value) 
with open("output.ini", "wb") as f: 
    iniwriter.write(f) 

if value == "": iniwriter.set(section_name,name,'""')作品,但是這是一個錯誤?或者我做錯了什麼?有沒有一種不危險的方式來做到這一點?

編輯:我使用Python的2.7

回答

2

從看ConfigParser source code,它看起來像有一個特殊的情況下read()功能將兩個雙引號轉換爲數值爲空字符串。

不完全確定爲什麼做出這樣的決定,但這絕對是故意的行爲,我認爲你需要與你的hacky if value == "": iniwriter.set(section_name,name,'""')去解決這個問題。

+0

嗯,你說得對。從*** Raw *** ConfigParser意外,甚至沒有關閉它的選項。感謝您的挖掘! – n611x007