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

比较两个ini文件的键并复制匹配键的值';s到python中的第二个ini文件,python,file,copy,compare,ini,Python,File,Copy,Compare,Ini,我有两个INI文件a,b如下 ########################################## ## Application ## Var Values Comment ## -------- ------------------ -------------------- --------------------------- ## App

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

##########################################
## 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
文件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.ini
的匹配键的值复制到
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
文件的数据并打印匹配的字典密钥对之前,它一直有效

separator = "="
keys = {}
with open('test.ini') as f:
    for line in f:
        if separator in line:
            name, value = line.split(separator, 1)
            keys[name.strip()] = value.strip()
separator1 = "="
keys1 = {}
with open('temp.ini') as f1:
    for line in f1:
       if separator1 in line:
            name, value = line.split(separator1, 1)
            keys1[name.strip()] = value.strip()
for key, value in keys.viewitems() & keys1.viewitems():
    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。

您的最后一个循环不太正确与您想象的不一样。此外,您必须使用
而不是
&

请尝试以下方法:

for key, value in keys.items():
    if key in keys1 and keys1[key] == value:
        print(key, value)

使用Python的模块它为我工作了..@Arun Kumar。但这里我需要将新的密钥对复制到
temp.ini
。就像在
test.ini
中找到任何新的键值一样,这些键值应该复制到
temp.ini