2013-04-25 63 views
2

我有一個cfg文件。在CFG文件中有如下一行:如何使用python修改配置文件?

[Environment] 
automation_type=GFX ;available options: GEM, HEXAII 

我想通過修改此行:

[Environment] 
automation_type=ABC ;available options: GEM, HEXAII 

我已經寫了這下面的代碼:

get_path_for_od_cfg = r"C:\Users\marahama\Desktop\Abdur\abc_MainReleaseFolder\OD\od\odConfig.cfg" 
    config = ConfigParser.RawConfigParser() 
    config.read(get_path_for_OpenDebug_cfg) 
    for sec in config.sections(): 
     for attr in config.options(sec): 
      if sec =='Environment' and attr == 'automation_type': 
       config.set('Environment','automation_type','ABC') 
    with open(get_path_for_OpenDebug_cfg, 'wb') as configfile: 
     config.write(configfile) 

執行後代碼,我得到

[Environment] 
automation_type = ABC 

";available options: GEM, HEXAII" this line is missing. 
+0

該行是一條評論。我不認爲'RawConfigParser'對象存儲註釋。 – 2013-04-25 13:20:22

+1

這是因爲「可用選項:GEM,HEXAII」是一個評論。我認爲你應該將註釋移動到另一行,或者使用簡單的文本處理技術,而不是ConfigParser。 – Elazar 2013-04-25 13:22:07

回答

6

隨着source code建議,讀取配置文件時,註釋會被忽略,這些都在不同的行(484)...

if line.strip() == '' or line[0] in '#;': 
    continue 

以及期權行(522):

if vi in ('=', ':') and ';' in optval: 
    # ';' is a comment delimiter only if it follows 
    # a spacing character 
    pos = optval.find(';') 
    if pos != -1 and optval[pos-1].isspace(): 
     optval = optval[:pos] 

所以我同意上面的評論,如果你關心保留評論,你應該轉向更低層次的東西。