Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20

Удаление участка текста в xml документе

31.08.2023, 14:46. Показов 2302. Ответов 21

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите, пожалуйста, что я делаю не так?
У меня есть .xml файлы и я замучился вручную (через поиск) находить и удалять в них один и тот же участок текста, поэтому установил плагин "python script" в NotePad++. Мне нужно что бы скрипт нашел участок начинающийся с "<cellStyleXfs count" и заканчивающийся "</cellStyleXfs>" и грохнул всё, что находится между этими маркерами вместе с ними.

1) Создаю новый скрипт: Плагины -> python script -> New script

2) Пишу скрипт:

```python
import re

# Получить содержимое открытого документа
content = editor.getText()

# Определить участок текста, который нужно удалить
start_tag = "<cellStyleXfs count"
end_tag = "</cellStyleXfs>"

# Создать регулярное выражение для поиска участка
regex = re.compile(re.escape(start_tag) + r".*?" + re.escape(end_tag), re.DOTALL)

# Удалить участок текста из содержимого
new_content = regex.sub("", content)

# Заменить содержимое документа на обновленное
editor.setText(new_content)
```
3) Сохраняю скрипт
4) Открываю XML документ в котором нужно удалить участок текста
5) Запускаю скрипт: Плагины -> python script -> Scripts -> -выбираю мой скрипт-

И программа просто закрывается...
GPT говорит, что, видимо, скрипт неверный.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.08.2023, 14:46
Ответы с готовыми решениями:

Изменение текста в xml документе с tinyxml2
Приветствую всех! Пытаюсь написать программу , которая записывает текст между &lt;TagName&gt; и &lt;/TegName&gt;. Использую парсер...

Удаление совпадений текста в документе MS Word
на форме текстовое поле, и кнопка. есть уже созданный файл Word (docx)(путь к файлу word берется из текстового поля) с определенным...

Замена текста в существующем документе Word через Область сопоставления XML
Друзья! Никак не могу разобраться с задачкой. Есть документ с XML-сопоставлением. В нем очень много повторяющихся слов, которые можно...

21
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
31.08.2023, 15:30
Python
1
2
3
4
import re
 
content = editor.getText()
editor.setText(re.sub(r"(?ims)<cellStyleXfs count.+?</cellStyleXfs>", "", content))
2
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20
31.08.2023, 15:59  [ТС]
Возможно, проблема с Notepad - все равно закрывается, попробую в Sublime Text
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
31.08.2023, 16:02
Цитата Сообщение от peppercat Посмотреть сообщение
Возможно, проблема с Notepad
Только что проверил. Работает
0
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20
31.08.2023, 16:20  [ТС]
у меня портативный notepad и на компе нет ничего, ни питона, ничего, возможно из-за этого у меня ничего не работает, попробую дома
по крайней мере Visual Studio Code не хочет ничего делать из-за отсутствия какого-то интерпретатора Питона - видимо, нужен Питон, как я понял
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,316
31.08.2023, 18:42
peppercat, питон не нужен..........
у меня все скрипты начинаются строкой:
# -*- coding: utf-8 -*-
понятно что это коммент, но когда я впервые знакомился с "python script" в NotePad++
там так было сказано, чем это вызвано уже не помню....
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,215
31.08.2023, 20:16
Цитата Сообщение от peppercat Посмотреть сообщение
import re
СкрипачПитон не нужен, родной...
В NP++, если ничего не поменялось с развитием и я ничего не перепутал (не пользуюсь, предпочитаю AkelPad), есть собственная возможность использования регэкспов...
1
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,316
01.09.2023, 08:14
YuS_2, никто не спорит, что в Блокноте++ если нажать контрол+эф, ввести в поиск <cellStyleXfs count.*</cellStyleXfs> и выбрать радиокнопку Регулярные выражения
где ".*" – точка со звёздочкой представляют любое количество символов в строке
то найдётся нужное и можно заменить на "" - то есть удалить, но ТС пошёл этим путём видимо потому, что аппетит вырастет во время еды и получит новый опыт.....
0
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20
01.09.2023, 11:37  [ТС]
Добавлено через 54 секунды
Цитата Сообщение от YuS_2 Посмотреть сообщение
СкрипачПитон не нужен, родной...
В NP++, если ничего не поменялось с развитием и я ничего не перепутал (не пользуюсь, предпочитаю AkelPad), есть собственная возможность использования регэкспов...
Так и не добрался до "стационарной" версии NotePad т.к. для меня довольно важно сохранения элемента портативности (на корпоративных машинах запрещена установка какого-либо софта)

Поэтому я решил попробовать ваш вариант с AkelPad и в её портативной версии мне удалось без проблем автоматизировать поиск и удаление всех необходимых участков текста через JavaScript (как там использовать пайтон скрипты - я не вкурил)

В описании плагина для AkelPad мое внимание привлекло следующее: "работать с файлами используя FileSystemObject объект, создавать ярлыки, работать с реестром Windows используя WshShell объект, или работать с функциями сети используя WshNetwork объект. Также Вы можете создавать и запускать скрипты, которые взаимодействуют с внешними приложениями, поддерживающими Automation (такими как Word и Excel)."
Дело в том, что .xml мне приходится редактировать именно внутри Excel файлов, значит ли это, что с помощью этого плагина можно автоматизировать не только поиск и удаление фрагментов, но и выгрузку .xml из Excel с последующим редактированием и возвращением назад в Excel?

Добавлено через 9 минут
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
YuS_2, никто не спорит, что в Блокноте++ если нажать контрол+эф, ввести в поиск <cellStyleXfs count.*</cellStyleXfs> и выбрать радиокнопку Регулярные выражения
где ".*" – точка со звёздочкой представляют любое количество символов в строке
то найдётся нужное и можно заменить на "" - то есть удалить, но ТС пошёл этим путём видимо потому, что аппетит вырастет во время еды и получит новый опыт.....
Раньше я так и делал, все вручную, но, фрагментов для удаления много и файлов таких тоже иногда сотни - я просто заколебался. В идеале, вообще сделать так, что бы другие пользователи могли сами кнопку одну условную нажать и там всё само удалялось, что не нужно, а не меня все дергали и отвлекали от работы.
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,316
01.09.2023, 11:51
peppercat, если вы работаете в Excel, тогда там есть VBA - который справится с этой задачей
0
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20
01.09.2023, 12:02  [ТС]
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
peppercat, питон не нужен..........
у меня все скрипты начинаются строкой:
# -*- coding: utf-8 -*-
понятно что это коммент, но когда я впервые знакомился с "python script" в NotePad++
там так было сказано, чем это вызвано уже не помню....
Увы, не помогло, программа все равно просто закрывалась.

Добавлено через 8 минут
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
peppercat, если вы работаете в Excel, тогда там есть VBA - который справится с этой задачей
Я пробовал только предустановленный функционал VBA в Excel, но, во-первых, процесс занимал вместо 5-10 минут (вручную) - несколько часов, во-вторых, часто просто зависал, в-третьих, выполнял нужные действия лишь отчасти и приходилось все равно потом вручную дочищать файл, в-четвертых, применение VBA требовало открытия файла, а они иногда просто не открываются, и самое страшное - в файле почему-то менялись значения, чего не должно происходить категорически вообще никак. Но если там есть возможность запрограммировать что-то самому, то есть смысл попробовать.

Сейчас мне удалось автоматизировать процесс лишь отчасти, т.е. я по-прежнему вручную вытаскиваю нужные .xml, открываю их в AcelPad, запускаю скрипты, возвращаю xml в Excel.
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,316
01.09.2023, 12:10
Цитата Сообщение от peppercat Посмотреть сообщение
Я пробовал только предустановленный функционал VBA в Excel
я что есть ещё какие-то?

надо начинать с переменной, например
path = "I:\replaces" в VBA
path = r"I:\replaces" в Python
и вперёд в цикле обращаемся к xml файлам этой папки и делаем то, что нужно
0
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20
01.09.2023, 12:19  [ТС]
Мы же сейчас про вот эту штуку говорим?
Миниатюры
Удаление участка текста в xml документе  
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,316
01.09.2023, 12:21
Цитата Сообщение от peppercat Посмотреть сообщение
Мы же сейчас про вот эту штуку говорим?
нет это на вкладке Разработчик
0
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20
01.09.2023, 12:39  [ТС]
А, понял
0
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20
01.09.2023, 13:34  [ТС]
Пытаюсь осуществить задуманное через VBA Excel, но он почему-то сначала какие-то связи не находит, а потом и сам styles.xml

Option Explicit

Sub RemoveFragmentInStylesXML()
Dim wb As Workbook
Dim filePath As String

' Выбор Excel файла
With Application.FileDialog(msoFileDialogOpen )
.Title = "Выберите Excel файл"
.Filters.Clear
.Filters.Add "Excel файлы", "*.xls*"
If .Show = -1 Then
filePath = .SelectedItems(1)
Set wb = Workbooks.Open(filePath)
Else
Exit Sub
End If
End With

' Удаление фрагмента в styles.xml
Dim xmlPath As String
Dim xmlContent As String
Dim startPos As Long
Dim endPos As Long

' Путь к styles.xml
xmlPath = wb.Path & "\xl\styles.xml"

' Проверка наличия файла
If Not Dir(xmlPath) <> "" Then
MsgBox "Файл styles.xml не найден.", vbExclamation
Exit Sub
End If

' Открытие файла styles.xml
Open xmlPath For Input As #1
xmlContent = Input$(LOF(1), #1)
Close #1

' Поиск позиций фрагмента
startPos = InStr(xmlContent, "<cellStyles count")
endPos = InStr(xmlContent, "</cellStyles>") + Len("</cellStyles>") - 1

If startPos > 0 And endPos > 0 Then
' Удаление фрагмента
xmlContent = Left(xmlContent, startPos - 1) & Mid(xmlContent, endPos + 1)

' Сохранение изменений
Open xmlPath For Output As #1
Print #1, xmlContent
Close #1

MsgBox "Фрагмент успешно удален из styles.xml.", vbInformation
Else
MsgBox "Фрагмент не найден в styles.xml.", vbExclamation
End If

' Закрытие Excel файла
wb.Close SaveChanges:=True
End Sub
Миниатюры
Удаление участка текста в xml документе  
Изображения
 
0
1711 / 578 / 76
Регистрация: 10.04.2009
Сообщений: 9,316
01.09.2023, 13:43
вам в ветку
Цитата Сообщение от peppercat Посмотреть сообщение
VBA
Добавлено через 4 минуты
также не понятно если есть
Выбор Excel файла
тогда зачем нужна
Проверка наличия файла
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,215
01.09.2023, 15:09
Цитата Сообщение от peppercat Посмотреть сообщение
ваш вариант с AkelPad
к сожалению, AkelPad давненько не развивается, автор хоть и не забросил его, вносит изредка критические изменения, но новых версий не выпускается... в этом плане NP++ предпочтительнее, скорее всего...

Цитата Сообщение от peppercat Посмотреть сообщение
значит ли это, что с помощью этого плагина можно автоматизировать не только поиск и удаление фрагментов, но и выгрузку .xml из Excel с последующим редактированием и возвращением назад в Excel?
Возможно, т.к. WSH пока никто не вырезал из Windows. Но в таком плане, сам я не использовал его, это всё же, больше текстовый редактор, а не средство автоматизации... для автоматизации лучше использовать более другие инструменты, например, питон, powershell и т.д.

но это всё лирика и оффтоп здесь...
Вам необходимо сформулировать задачу (не вообще, что хотелось бы, а более конкретно), выбрать инструмент и задавать вопрос уже в соответствующем разделе... наверное, так быстрее помощь получите.
0
0 / 0 / 0
Регистрация: 31.08.2023
Сообщений: 20
01.09.2023, 15:25  [ТС]
Цитата Сообщение от Ципихович Эндрю Посмотреть сообщение
вам в ветку

Добавлено через 4 минуты
также не понятно если есть
Выбор Excel файла
тогда зачем нужна
Проверка наличия файла
Похоже, через VBA макрос не получится, народ предлагает VBS-Script.
Проблема в том, что VBA не воспринимает эксель-файл как папку, из которой можно вытащить styles.xml для редактирования.
Но GPT, видимо, устал на сегодня и отдыхает, продолжу в понедельник.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Sub RemoveFragment2()
Dim selectedFile As String
Dim xmlPath As String
Dim xmlContent As String
Dim startText As String
Dim endText As String
Dim startIdx As Long
Dim endIdx As Long
 
' Отображаем диалоговое окно для выбора Excel файла
With Application.FileDialog(msoFileDialogFilePicker)
.Title = "Выберите файл Excel"
.Filters.Add "Файлы Excel", "*.xlsx; *.xls"
.AllowMultiSelect = False
 
If .Show = -1 Then
selectedFile = .SelectedItems(1)
Else
' Прерываем выполнение макроса, если пользователь не выбрал файл
Exit Sub
End If
End With
 
' Путь к файлу styles.xml
xmlPath = selectedFile & "\xl\styles.xml"
 
' Проверяем, существует ли файл
If Dir(xmlPath) = "" Then
MsgBox "Файл styles.xml не найден.", vbCritical
Else
' Открываем файл styles.xml и считываем его содержимое
Open xmlPath For Input As #1
xmlContent = Input$(LOF(1), #1)
Close #1
End If
 
' Текст, который нам нужно удалить
startText = "<cellStyles count"
endText = "</cellStyles>"
 
' Находим позиции начала и конца фрагмента текста
startIdx = InStr(xmlContent, startText)
endIdx = InStr(xmlContent, endText)
 
' Удаляем фрагмент текста
If startIdx > 0 And endIdx > 0 Then
xmlContent = Left(xmlContent, startIdx - 1) & Mid(xmlContent, endIdx + Len(endText))
 
' Сохраняем изменения
Open xmlPath For Output As #1
Print #1, xmlContent
Close #1
 
MsgBox "Фрагмент текста успешно удален.", vbInformation
Else
MsgBox "Фрагмент текста не найден.", vbExclamation
End If
End Sub
Добавлено через 14 минут
Цитата Сообщение от YuS_2 Посмотреть сообщение
к сожалению, AkelPad давненько не развивается, автор хоть и не забросил его, вносит изредка критические изменения, но новых версий не выпускается... в этом плане NP++ предпочтительнее, скорее всего...


Возможно, т.к. WSH пока никто не вырезал из Windows. Но в таком плане, сам я не использовал его, это всё же, больше текстовый редактор, а не средство автоматизации... для автоматизации лучше использовать более другие инструменты, например, питон, powershell и т.д.

но это всё лирика и оффтоп здесь...
Вам необходимо сформулировать задачу (не вообще, что хотелось бы, а более конкретно), выбрать инструмент и задавать вопрос уже в соответствующем разделе... наверное, так быстрее помощь получите.
Вот как раз прыгаю по различным инструментам: NotePad, Sublime Text, Visual Studio Code, AkelPad, VBA-Excel и вот сейчас мне предложили VBS-Script, возможно он сможет решить задачу.

А задача, как мне казалось, простая: возможность выбрать файл Excel, далее скрипт сам лезет в его styles.xml (\xl\styles.xml), удаляет там фрагмент текста (известно начало и конец фрагмента), сохраняет изменения в styles.xml.

Последний барьер, с которым столкнулся, VBA, видимо, не воспринял файл эксель как папку (что умеет какой-нибудь win-RAR), из которой можно вытащить требуемый xml.
0
Любознательный
 Аватар для YuS_2
7404 / 2254 / 360
Регистрация: 10.03.2016
Сообщений: 5,215
01.09.2023, 18:37
Цитата Сообщение от peppercat Посмотреть сообщение
А задача, как мне казалось, простая: возможность выбрать файл Excel, далее скрипт сам лезет в его styles.xml (\xl\styles.xml), удаляет там фрагмент текста (известно начало и конец фрагмента), сохраняет изменения в styles.xml.
Всё это умеет powershell, переместиться лучше в его раздел...
А по поводу Excel, сразу можно заглянуть сюда и установить модуль, он сильно упростит работу по автоматизации...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.09.2023, 18:37
Помогаю со студенческими работами здесь

Удаление в XML-файле текста после определённого символа
Помогите скриптом. Есть куча файлов с разными расширениями формата от 121 до 10103 и более. все обычные текстовые файлы. для дальнейшей...

Xml-сериализация при подключении к серверу более одного клиента (в документе xml (0 0) присутствует ошибка)
Здравствуйте, практикую сетевое программирование, решил написать многопоточный проект клиент-сервера, который обменивается информацией в...

Поиск по id в XML документе
Помогите организовать поиск в данной программе

Извлечение определенного участка текста
В TextBox1 есть текст &quot;договор № 512 от 01.01.2015 (далее – Договор)&quot; Как по нажатию кнопки в TextBox2 получить &quot;512&quot;, а в...

Символ & в XML-документе (RSS)
Подскажите,пожалуйста...Я написал небольшой редактор для генерации RSS-файлов,и есть в RSS тег &lt;link&gt;.И некоторые ссылки,которые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru