Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中解析config.ini_Python_Parsing_Config - Fatal编程技术网

在python中解析config.ini

在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

文件

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"

; 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规范也不允许,所以我现在将忽略它。