gpt4 book ai didi

python - 通过python编辑配置文件

转载 作者:太空狗 更新时间:2023-10-29 20:52:51 24 4
gpt4 key购买 nike

我需要通过 python 编辑一个配置文件,我尝试在 stackoverflow 和谷歌上搜索,但它们没有涵盖我的情况,因为我需要替换文件中的行并在我的搜索中执行匹配。

此外,我发现涵盖了如何为一行执行此操作,我将在文件中执行至少 8 行替换,我想知道是否有比放置 10 行更干净、更优雅的方法完全替换 (foo, bar) 行。

我需要“匹配”像“ENABLEPRINTER”、“PRINTERLIST”、“PRNT1.PORT”这样的行。我想匹配这些文本并忽略后面的内容(例如:“=PRNT1, PRNT2”)。

所以我会做类似的事情

replace('ENABLEPRINTER', 'y')
replace('PRINTERLIST', 'PRNT3)

文件看起来像这样:

ENABLEPRINTER=n
PRINTERLIST=PRNT1, PRNT2

PRNT1.PORT=9600
PRNT1.BITS=8

另请注意,这些文件大约有 100 行,我需要编辑其中的大约 10 行。

非常感谢您的帮助。

更新:

使用@J.F. 发布的代码。塞巴斯蒂安,我现在收到以下错误:

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

文件的第 611 行是:

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

所以问题出在 ' 字符上。

如果我注释掉该行,则该脚本可以与@J.F. 发布的代码一起正常工作。塞巴斯蒂安。

最佳答案

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()

之前:

ENABLEPRINTER=n 
PRINTERLIST=PRNT1, PRNT2

PRNT1.PORT=9600
PRNT1.BITS=8

之后:

y=n 
PRNT3==PRNT1, PRNT2

734=9600
PRNT1.BITS=8

太简单了,无法确定。说出错误或弱点是什么。

正则表达式的优点是它们可以很容易地针对特定情况进行调整。

.

编辑:

我刚看到:

“我想做的是给变量赋一个新值”

你可以早点通知!

你能举一个文件之前/之后的例子吗?

.

编辑 2

下面是更改文件中某些变量值的代码:

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)

之前:

ENABLEPRINTER=n 
PRINTERLIST=PRNT1, PRNT2

PRNT1.PORT=9600
PRNT1.BITS=8

之后:

ENABLEPRINTER=y 
PRINTERLIST=PRNT3

PRNT1.PORT=8310
PRNT1.BITS=8

关于python - 通过python编辑配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5299092/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com