Edit configuration file through python

后端 未结 2 1428
隐瞒了意图╮
隐瞒了意图╮ 2021-02-20 03:43

I need to edit a configuration file through python and i tried searching on stackoverflow and google and they don\'t cover my situation, since i need to replace lines in the fil

2条回答
  •  半阙折子戏
    2021-02-20 04:29

    import re 
    pat = re.compile('ENABLEPRINTER|PRINTERLIST|PRNT1.PORT')
    
    def jojo(mat,dic = {'ENABLEPRINTER':'y',
                        'PRINTERLIST':'PRNT3',
                        'PRNT1.PORT':'734'} ):
        return dic[mat.group()]
    
    with open('configfile','rb+') as f:
        content = f.read()
        f.seek(0,0)
        f.write(pat.sub(jojo,content))
        f.truncate()
    

    Before:

    ENABLEPRINTER=n 
    PRINTERLIST=PRNT1, PRNT2  
    
    PRNT1.PORT=9600 
    PRNT1.BITS=8
    

    After:

    y=n 
    PRNT3==PRNT1, PRNT2  
    
    734=9600
    PRNT1.BITS=8
    

    Too simple to be definitive. Say what are the errors or weaknesses.

    The advantage of regexes is they can be modulated easily to particular cases.

    .

    EDIT:

    I've just seen that:

    "what i want to do is assign a new value to the variable "

    you could inform of that earlier !

    Could you give an exemple of file before / after , please.

    .

    EDIT 2

    Here's the code to change the values of certain variables in a file:

    import re
    from os import fsync
    
    def updating(filename,dico):
    
        RE = '(('+'|'.join(dico.keys())+')\s*=)[^\r\n]*?(\r?\n|\r)'
        pat = re.compile(RE)
    
        def jojo(mat,dic = dico ):
            return dic[mat.group(2)].join(mat.group(1,3))
    
        with open(filename,'rb') as f:
            content = f.read() 
    
        with open(filename,'wb') as f:
            f.write(pat.sub(jojo,content))
    
    
    
    #-----------------------------------------------------------
    
    vars = ['ENABLEPRINTER','PRINTERLIST','PRNT1.PORT']
    new_values = ['y','PRNT3','8310']
    what_to_change = dict(zip(vars,new_values))
    
    
    updating('configfile_1.txt',what_to_change)
    

    Before:

    ENABLEPRINTER=n 
    PRINTERLIST=PRNT1, PRNT2  
    
    PRNT1.PORT=9600 
    PRNT1.BITS=8
    

    After:

    ENABLEPRINTER=y 
    PRINTERLIST=PRNT3
    
    PRNT1.PORT=8310 
    PRNT1.BITS=8
    

提交回复
热议问题