在python中解析config.ini
文件 config.ini 文件 ;SQL Server 2012配置文件 [选项]在python中解析config.ini,python,parsing,config,Python,Parsing,Config,文件 config.ini 文件 ;SQL Server 2012配置文件 [选项] ; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter. ACTION="Install" ; Detailed help for command line argument ENU has not been defined yet. ENU="True" ; P
; Specifies a Setup work flow, like INSTALL, UNINSTALL, or UPGRADE. This is a required parameter.
ACTION="Install"
; Detailed help for command line argument ENU has not been defined yet.
ENU="True"
; Parameter that controls the user interface behavior. Valid values are Normal for the full UI,AutoAdvance for a simplied UI, and EnableUIOnServerCore for bypassing Server Core setup GUI block.
IACCEPTSQLSERVERLICENSETERMS="True"
; Setup will not display any user interface.
QUIET="True"
我有这样一个python代码
def change_file(filepath, add_comment, trigger_words):
def process(line):
line_word = line.lstrip(';').split('=')[0]
if line_word in trigger_words:
if add_comment:
line = line if line.startswith(';') else ';' + line
else:
line = line.lstrip(';')
return line
with open(filepath) as f:
content = [process(line) for line in f]
with open(filepath, 'r+') as f:
f.truncate()
f.write(''.join(content))
change_file('abc.ini', add_comment=True, trigger_words=["IACCEPTSQLSERVERLICENSETERMS", "ENU"])
当我运行上面的代码时,我得到如下输出
;SQL Server 2012 Configuration File
嬀伀倀吀䤀伀一匀崀ഀഀ
㬀 匀瀀攀挀椀昀椀攀猀 愀 匀攀琀甀瀀 眀漀爀欀 昀氀漀眀Ⰰ 氀椀欀攀 䤀一匀吀䄀䰀䰀Ⰰ 唀一䤀一匀吀䄀䰀䰀Ⰰ 漀爀 唀倀䜀刀䄀䐀䔀⸀ 吀栀椀猀 椀猀 愀 爀攀焀甀椀爀攀搀 瀀愀爀愀洀攀琀攀爀⸀ ഀഀ
䄀䌀吀䤀伀一㴀∀䤀渀猀琀愀氀氀∀ഀഀ
㬀 䐀攀琀愀椀氀攀搀 栀攀氀瀀 昀漀爀 挀漀洀洀愀渀搀 氀椀渀攀 愀爀最甀洀攀渀琀 䔀一唀 栀愀猀 渀漀琀 戀攀攀渀 搀攀昀椀渀攀搀 礀攀琀⸀ ഀഀ
䔀一唀㴀∀吀爀甀攀∀ഀഀ
㬀 倀愀爀愀洀攀琀攀爀 琀栀愀琀 挀漀渀琀爀漀氀猀 琀栀攀 甀猀攀爀 椀渀琀攀爀昀愀挀攀 戀攀栀愀瘀椀漀爀⸀ 嘀愀氀椀搀 瘀愀氀甀攀猀 愀爀攀 一漀爀洀愀氀 昀漀爀 琀栀攀 昀甀氀氀 唀䤀Ⰰ䄀甀琀漀䄀搀瘀愀渀挀攀 昀漀爀 愀 猀椀洀瀀氀椀攀搀 唀䤀Ⰰ 愀渀搀 䔀渀愀戀氀攀唀䤀伀渀匀攀爀瘀攀爀䌀漀爀攀 昀漀爀 戀礀瀀愀猀猀椀渀最 匀攀爀瘀攀爀 䌀漀爀攀 猀攀琀甀瀀 䜀唀䤀 戀氀漀挀欀⸀ ഀഀ
ഀഀ
IACCEPTSQLSERVERLICENSETERMS="True"
ഀഀ
; Setup will not display any user interface.
ഀഀ
QUIET="True"
期望只是增加
)
在这些词前面
“IACCEPTSQLSERVERLICENSETERMS”,“ENU”
如果它是一个真正的INI文件,那么您可以使用Python的标准库模块,名为 否则,将文件读入内存并将其拆分为字典或列表 然后你可以添加任何你想要的东西,然后放回去 像这样:
def LoadConfigFile (path):
f = open(path, "r")
c = f.readlines()
f.close()
d = {}
for x in c:
x = x.strip()
if x.startswith(";") or x.startswith("#"): continue
x = x.split("=", 1)
if len(x)!=2: continue
d[x[0].rstrip()] = x[1].lstrip()
return d
通过这种方式,您可以轻松访问名称、值对,并且可以在运行时添加选项
当您想保存它时,只需颠倒过程即可
如果希望选项按原始顺序排序,请使用OrderedDict()或列表而不是字典。如果它是真实的INI文件,则可以使用Python的标准库模块,名为 否则,将文件读入内存并将其拆分为字典或列表 然后你可以添加任何你想要的东西,然后放回去 像这样:
def LoadConfigFile (path):
f = open(path, "r")
c = f.readlines()
f.close()
d = {}
for x in c:
x = x.strip()
if x.startswith(";") or x.startswith("#"): continue
x = x.split("=", 1)
if len(x)!=2: continue
d[x[0].rstrip()] = x[1].lstrip()
return d
通过这种方式,您可以轻松访问名称、值对,并且可以在运行时添加选项
当您想保存它时,只需颠倒过程即可
如果希望选项按原始顺序排序,请使用OrderedDict()或列表而不是字典。将其重构为一个方法非常方便,例如
read\u config(filename)
将返回字典!现在快乐吗?顺便说一句,这是一个函数,不是一个方法:D现在轮到您编写一个SaveConfigFile(path,D):D也许我们可以用Load和Save方法创建一个ConfigFile()类。嗯,也许把它们放在一个单独的模块里道森:)完美也许很棒,但完美,一点也不完美。刚才我注意到我没有删除键和值周围的空格。我要编辑。此外,本例不允许在key=value行中添加注释,但INI规范也不允许,因此我现在将忽略它。将其重构为一个方法非常方便,例如read\u config(filename)
,它将返回一个字典!现在快乐吗?顺便说一句,这是一个函数,不是一个方法:D现在轮到您编写一个SaveConfigFile(path,D):D也许我们可以用Load和Save方法创建一个ConfigFile()类。嗯,也许把它们放在一个单独的模块里道森:)完美也许很棒,但完美,一点也不完美。刚才我注意到我没有删除键和值周围的空格。我要编辑。另外,这个例子不允许在key=value行中添加注释,但是INI规范也不允许,所以我现在将忽略它。