比较两个 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.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)

你的最后一个循环不太正确。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("%sn" % 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("%sn" % separator.join([key, val2 or val1]))

在这里,val2 或 val1 用于确保我们更喜欢第二个文件的值而不是第一个文件的值。如果您需要优先选择第一个文件的值而不是第二个文件的值,则应使用 val1 或 val2。

相关内容

  • 没有找到相关文章

最新更新