Вопрос по dictionary, python, replace – Записать значения словаря Python обратно в файл

1

Я извлек информацию из двух файлов 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 Khalid
обычно не полезно показывать весь код. Вы должны вставить достаточно кода, чтобы позволить другим воспроизвести проблему, которую вы наблюдаете. Вы должны вставить это здесь, чтобы другие не нуждались в посещении внешнего сайта. (Если появляются полосы прокрутки, возможно, это слишком много кода.) moooeeeep
пожалуйста, опубликуйте свой файл-код moooeeeep
Я не знаю, поэтому и спрашиваю ... Я новичок в Python. Я думал, что смогу повторно импортировать словарь в свой файл, но не знаю как. Kaly
Как вы ожидаете, что код Python изменит файлы, если вы изменяете словари? Blender

Ваш Ответ

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

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

d_target.update(d_source)

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

Похожие вопросы