2

(см. решение ниже)

У меня есть XML-файлы, которые я анализирую с помощью скрипта Python (я не писал его, но он отлично справляется с работой). Проблема заключается в том, что файл XML имеет большой размер (~ 1 ГБ), и анализ занимает много времени из-за перегрузки памяти. Файл XML полон бесполезной информации в определенных элементах - как лучше всего от них избавиться? Я пробовал xmlstarlet, но он слишком "ориентирован на XML", т.е. это занимает целую вечность по тем же причинам, что и скрипт Python.

Что мне просто нужно сделать, так это тупо избавиться от данных элементов: удалить все между <mytag> и </mytag> по всему файлу (есть несколько <mytag>...</mytag> , все быть удаленным).

Я был бы очень признателен за ваши идеи, так как я уверен, что есть хорошие способы сделать это, не изобретая велосипед.

Спасибо!

РЕДАКТИРОВАТЬ: я, наконец, закончил с

perl -pe "undef $/;s/<mytag>.*?<\/mytag>//msg" < inputfile.xml > outputfile.xml

который я не понял, @Vlad опубликовал также.

2 ответа2

3

При работе с очень большими файлами XML рекомендуется использовать синтаксический анализатор событий SAX. lxml может сделать это в Python , вот отличная статья на эту тему: Высокопроизводительный синтаксический анализ XML в Python с помощью lxml.

Другой вариант - использовать что-то вроде sed для удаления этих тегов из файла.

Или Perl скрипт:

perl -i.bak -pe 'BEGIN{undef $/;} s/<mytag>.*<\/mytag>//smg' file.xml
0

Поиск и замена текстового редактора, который может сделать это с подстановочными знаками? Желательно тот, который не пытается загрузить весь файл при открытии (или это займет много лет). Большинство Hex-редакторов также имеют возможности текстового поиска-замены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .