python编辑配置_通过python编辑配置文件

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 file and perform matches in my search.

Also, what i found covers how to do it for one line, i will be performing at least 8 line replacements in the file and I would like to know if there is a cleaner and more elegant way of doing this than putting 10 replace(foo, bar) lines altogether.

I need to "match" lines like "ENABLEPRINTER", "PRINTERLIST", "PRNT1.PORT".

I want to match thesse text and ignore whatever follows (ex: "=PRNT1, PRNT2").

So i would do something like

replace('ENABLEPRINTER', 'y')

replace('PRINTERLIST', 'PRNT3)

The file looks like this:

ENABLEPRINTER=n

PRINTERLIST=PRNT1, PRNT2

PRNT1.PORT=9600

PRNT1.BITS=8

Also note these files are about 100 lines and i need to edit about 10 of them.

Thank you very much for your help.

UPDATE:

Using the code posted by @J.F. Sebastian, i'm now getting the following error:

configobj.ParseError: Parse error in value at line 611.

Line 611 of the file is:

log4j.appender.dailyRollingFile.DatePattern='.'yyyy-MM-d

So the problem is with the ' character.

If I comment out that line, the script is working fine with the code posted by @J.F. Sebastian.

解决方案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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值