2012-07-17 78 views
1

我从两个XML文件中提取信息为2个字典,因为我想比较这些文件并更改其中一个文件中的信息。将Python字典的值写回文件

这是我的字典:

源词典:

d_source={'123': 'description_1', '456': 'description_2'} 

目标词典:

d_target={'123': '\n', '456': 'description_2'} 

这是我的替换代码:

for i in d_source: 
    for j in d_target: 
     if d_target[j]=='\n': 
      d_target[j]=d_source[i] 
print (d_target) 

d_target更新为

d_target = {'123': 'description_1', '456': 'description_2'} 

但是,我从中提取字典的原始文件保持不变。我在这里错过了什么?

+4

如果您修改字典,您如何期待Python代码修改文件? – Blender 2012-07-17 07:52:51

+0

我不知道,这就是为什么我问....我是Python新手。我以为我可以将字典重新导入到我的文件中,但不知道如何。 – Kaly 2012-07-17 07:55:21

+2

您需要将字典写回文件,字典和文件之间没有链接。 – 2012-07-17 08:03:23

回答

2

其中一个解决方案,为您将是:

比方说,你想打印它作为一个JSON,它,如果你已经使用类型的字典是有道理的。

import json 
output = json.dumps(d_target) 

f = open("myfile", 'w') 
f.write(output) 
f.close() 

这将打印您的字典作为json文件myfile。

如果你想要它作为一个XML你可以使用elementtree模块。

那么你可以使用这样的事情:

from elementtree import ElementTree as ETree 
ET = ETree 
ET.xml_declaration = "true" 
products = ET.Element("products") 
properties = ET.Element("properties") 
products.append(properties) 
products.attrib["xmlns"] = "http://schema.example.com/product_data_1.0" 
update = ET.Element("update") 
delete = ET.Element("delete") 
products.append(delete) 
products.append(update) 

这仅仅是一个例子,看看它是如何做,这会造成类似:

<products xmlns="http://schema.example.com/product_data_1.0"> 
     <properties /> 
     <delete /> 
     <update /> 
</products> 

并打印此XML来再次提交文件:

output = ET.tostring(products, "utf-8") 
f = open("xml", 'w') 
f.write(output) 
f.close() 
+0

JSON很简单。由于没有一对一映射,XML通常会更难一些。但总的来说,这种方法是正确的。反序列化,更改,然后序列化。 – Krumelur 2012-07-17 08:26:35

+0

好主意!但不幸的是,我需要一个XML输出,否则我无法将该文件重新导入到我的软件中:/。 – Kaly 2012-07-17 08:39:33

0

您的替换代码(在您的示例中)可以替换为.update()方法dict

d_target.update(d_source) 

我不知道你想怎么来持久dict但使用json模块是一个选项。否则,如果您想要更新的XML文件,则必须查看修改节点中的属性,并在“somelibraryhere”.tostring()的(或类似的)方法中写入结果。