Как обновить / изменить файл XML в python?

Ниже приведен короткий ответ: https://wiki.python.org/moin/TimeComplexity

Без аргументов, чтобы поп его O (1)

С аргументом pop:

  • Среднее время Сложность O (k) (k представляет число, переданное в качестве аргумента для pop
  • Амортизированное наихудшее временное время сложность O (k)
  • Худшая временная сложность O (n)

Средняя временная сложность:

  • Каждый раз, когда вы вводите значение временной сложности этой операции - O (n - k).
  • Например, если у вас есть список из 9 элементов, кроме удаления из конца списка, это 9 операций и удаление с самого начала из списка - 1 операция (удаление 0-го индекса и перемещение всех остальных элементов в их текущий индекс - 1)
  • Так как n - k для среднего элемента списка - это k операций, среднее может быть сокращено к O (k).
  • Другой способ подумать об этом заключается в том, что представьте, что каждый индекс был удален из вашего списка из 9 элементов один раз. f 45 операций. (9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 45)
  • 45 равно O (nk), и поскольку поп-операция произошла O (n) раз, вы делите nk по n, чтобы получить O (k)

Амортизированная худшая временная сложность случая

  • Представьте, что у вас есть список из 9 пунктов снова. Представьте, что вы удаляете каждый элемент списка, и возникает наихудший случай, и вы каждый раз удаляете первый элемент списка.
  • Поскольку список уменьшается на 1 каждый раз, когда количество операций уменьшается каждый раз от 9 до 1.
  • 9 + 8 + 7 + 6 + 5 + 4 + 3 + 2 + 1 = 45. 45 равно O (nk). Поскольку вы сделали 9 операций, а 9 - O (n), чтобы рассчитать амортизированный сценарий наихудшего случая, вы выполняете O (nk) / O (n), который равен O (k)
  • . Указывая, что это O (n) для средняя и амортизированная худшая временная сложность также является правильной. Отметим, что O (k) приблизительно равно O (1 / 2n), а падение константы равно O (n)

Худшая временная сложность случая

  • В отличие от амортизированная наихудшая временная сложность, вы не учитываете состояние структуры данных и не задумываетесь о наихудшем случае для любой отдельной операции.
  • В этом случае в худшем случае вам нужно удалить 1-й элемент из списка, который является O (n).

Вот что я подумать об этом, если это поможет:

23
задан Filipp W. 20 November 2018 в 20:49
поделиться

6 ответов

Быстрый и простой способ, который вам определенно не следует делать (см. Ниже), заключается в том, чтобы прочитать весь файл в виде списка строк с помощью readlines () . Я пишу это на случай, если вы ищете быстрое и простое решение.

Просто откройте файл с помощью open () , затем вызовите метод readlines () . Вы получите список всех строк в файле. Теперь вы можете легко добавлять строки перед последним элементом (просто добавьте в список один элемент перед последним). В заключение, вы можете записать их обратно в файл с помощью Writelines () .

Пример может помочь:

my_file = open(filename, "r")
lines_of_file = my_file.readlines()
lines_of_file.insert(-1, "This line is added one before the last line")
my_file.writelines(lines_of_file)

Причина, по которой вам не следует этого делать, заключается в том, что, если вы не делаете что-то очень быстро n 'грязный, вы должны использовать синтаксический анализатор XML. Это библиотека, которая позволяет разумно работать с XML, используя такие концепции, как DOM, деревья и узлы. Это не только правильный способ работы с XML, но и стандартный способ, который делает ваш код более переносимым и более легким для понимания другими программистами.

В ответе Тима упоминается проверка xml.dom.minidom для этой цели, что, на мой взгляд, было бы отличной идеей.

если вы не делаете что-то очень быстрое и грязное, вам следует использовать анализатор XML. Это библиотека, которая позволяет вам разумно работать с XML, используя такие концепции, как DOM, деревья и узлы. Это не только правильный способ работы с XML, но и стандартный способ, который делает ваш код более переносимым и более легким для понимания другими программистами.

В ответе Тима упоминается проверка xml.dom.minidom для этой цели, что, на мой взгляд, было бы отличной идеей.

если вы не делаете что-то очень быстрое и грязное, вам следует использовать анализатор XML. Это библиотека, которая позволяет разумно работать с XML, используя такие концепции, как DOM, деревья и узлы. Это не только правильный способ работы с XML, но и стандартный способ, который делает ваш код более переносимым и более легким для понимания другими программистами.

В ответе Тима упоминается проверка xml.dom.minidom для этой цели, что, на мой взгляд, было бы отличной идеей.

10
ответ дан 28 November 2019 в 06:05
поделиться

While I agree with Tim and Oben Sonne that you should use an XML library, there are ways to still manipulate it as a simple string object.

I likely would not try to use a single file pointer for what you are describing, and instead read the file into memory, edit it, then write it out.:

inFile = open('file.xml', 'r')
data = inFile.readlines()
inFile.close()
# some manipulation on `data`
outFile = open('file.xml', 'w')
outFile.writelines(data)
outFile.close()
2
ответ дан 28 November 2019 в 06:05
поделиться

Useful Python XML parsers:

  1. Minidom - functional but limited
  2. ElementTree - decent performance, more functionality
  3. lxml - high-performance in most cases, high functionality including real xpath support

Any of those is better than trying to update the XML file as strings of text.

What that means to you:

Open your file with an XML parser of your choice, find the node you're interested in, replace the value, serialize the file back out.

24
ответ дан 28 November 2019 в 06:05
поделиться

Что вы действительно хотите сделать, так это использовать синтаксический анализатор XML и добавить новые элементы с предоставленным API.

Затем просто перезапишите файл.

Самым простым в использовании, вероятно, будет парсер DOM, подобный приведенному ниже:

http://docs.python.org/library/xml.dom.minidom.html

1
ответ дан 28 November 2019 в 06:05
поделиться

Вы должны прочитать XML-файл, используя конкретные модули XML. Таким образом, вы можете редактировать XML-документ в памяти и переписывать измененный XML-документ в файл.

Вот краткое руководство: http://docs.python.org/library/xml.dom.minidom. html

Существует множество других XML-утилит, и какая из них лучше всего зависит от характера вашего XML-файла и от того, каким образом вы хотите его редактировать.

0
ответ дан 28 November 2019 в 06:05
поделиться

Чтобы сделать этот процесс более надежным, вы можете рассмотреть возможность использования синтаксического анализатора SAX (таким образом вам не нужно хранить весь файл в памяти), чтения и записи до конца дерева и затем начните добавлять.

1
ответ дан 28 November 2019 в 06:05
поделиться
Другие вопросы по тегам:

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