猿问

比较两个ini文件的键并将匹配键的值复制到python中的第二个ini文件

我有两个 INI 文件,a , b如下所示


文件 a.ini


##########################################

## Application


## Var                          Values                  Comment

## --------                     ------------------      ----------------- 

------------------------------

## Application                   1,2                    Each server is attached to a valid point

##                                                      t2

##                                                      1 = dummy, 2 = hds

app=3

sv=2

type=ort

serv=t2

val=d7

文件 b.ini


##########################################

## Application


## Var                          Values                  Comment

## --------                     ------------------      -------------------- 

---------------------------

## Application                   1                      Each server is attached to a valid point

##                                                      t2

##                                                      1 = dummy, 

app=3

sv=2

type=ort3

serv=t22

stage=5

我想将 的未注释键a.ini与 的未注释键进行比较b.ini。因此,如果键匹配,那么我想复制a.inito的匹配键的值b.ini而不会干扰注释,因为这是结构良好的文件。如果新键存在于a.ini该键中,则值会盲目复制到b.ini。并且当我们将匹配的值的键写入键b.ini的位置时不应改变。


所以最终输出将如下所示


##########################################

## Application


## Var                          Values                  Comment

## --------                     ------------------      -------------------- 

---------------------------

## Application                   1                      Each server is attached to a valid point

##                                                      t2

##                                                      1 = dummy, 

app=3

sv=2

type=ort

serv=t2

stage=5

val=d7

我遵循了以下方法,但它一直工作到读取两个INI文件的数据并打印匹配的字典密钥对。


小唯快跑啊
浏览 238回答 2
2回答

catspeake

你的最后一个循环不太正确。 for x in y & z不像你认为的那样工作。此外,您必须使用and代替&.试试这个:for key, value in keys.items():    if key in keys1 and keys1[key] == value:        print(key, value)

函数式编程

您可以使用以下代码with open("out.ini", 'w') as outfile_handle:   for key, value in keys1.iteritems():      outfile_handle.write("%s\n" % separator.join([key, keys.get(key, value)]))更新如果您想要合并来自两个文件的所有键,您可以先创建两个键集的并集,然后对其进行迭代以形成文件。请参阅下面的代码。with open("out.ini", 'w') as outfile_handle:   all_keys = set(keys.keys() + keys1.keys())   for key in all_keys:      val1 = keys.get(key)      val2 = keys1.get(key)      outfile_handle.write("%s\n" % separator.join([key, val2 or val1]))在这里, val2 或 val1 用于确保我们更喜欢第二个文件的值而不是第一个文件的值。如果您需要优先选择第一个文件的值而不是第二个文件,则应使用 val1 或 val2。
随时随地看视频慕课网APP

相关分类

Python
我要回答