Записать значения словаря Python обратно в файл

Я извлек информацию из двух файлов XML в 2 словаря, потому что хотел сравнить эти файлы и изменить информацию в одном из них.

Это мои словари:

исходный словарь:

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'}

Однако мои исходные файлы, из которых я извлек словари, остаются без изменений. Что мне здесь не хватает?

 Burhan Khalid17 июл. 2012 г., 10:03
Вам нужно записать словарь обратно в файл, между словарем и файлом нет никакой связи.
 moooeeeep17 июл. 2012 г., 10:27
пожалуйста, опубликуйте свой файл-код
 Blender17 июл. 2012 г., 09:52
Как вы ожидаете, что код Python изменит файлы, если вы изменяете словари?
 moooeeeep17 июл. 2012 г., 10:44
обычно не полезно показывать весь код. Вы должны вставить достаточно кода, чтобы позволить другим воспроизвести проблему, которую вы наблюдаете. Вы должны вставить это здесь, чтобы другие не нуждались в посещении внешнего сайта. (Если появляются полосы прокрутки, возможно, это слишком много кода.)
 Kaly17 июл. 2012 г., 09:55
Я не знаю, поэтому и спрашиваю ... Я новичок в Python. Я думал, что смогу повторно импортировать словарь в свой файл, но не знаю как.

Ответы на вопрос(2)

Решение Вопроса

Одним из решений для вас будет:

Допустим, вы хотите напечатать его как json, это имеет смысл, если вы уже используете dicts.

import json 
output = json.dumps(d_target)

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

Это напечатает ваш файл для сохранения файла myfile в формате json.

И если вы хотите использовать его как 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()
 Kaly17 июл. 2012 г., 10:39
Отличная идея! Но, к сожалению, мне нужен вывод XML, иначе я не могу повторно импортировать файл в свое программное обеспечение: /.
 17 июл. 2012 г., 10:26
JSON прост. XML обычно немного сложнее, поскольку нет однозначного отображения. Но в целом подход правильный. Десериализовать, изменить, затем сериализовать.

Ваш код замены (в вашем примере) можно заменить на.update() метод наdict.

d_target.update(d_source)

Я не уверен, как вы хотите сохранитьdict но используяjson Модуль является одним из вариантов. В противном случае, если вам требуется обновленный XML-файл, вам придется посмотреть на изменение атрибутов в узлах и написание результата метода «somelibraryhere» .tostring () (или аналогичного).

Ваш ответ на вопрос