我有两个如下所示的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)
答案 0 :(得分:1)
您可以使用以下代码
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。
答案 1 :(得分:1)
您的最后一个循环不太正确。 for x in y & z
不能像您认为的那样工作。另外,您必须使用and
而不是&
。
尝试以下方法:
for key, value in keys.items():
if key in keys1 and keys1[key] == value:
print(key, value)