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