Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 15, 2017 19:25:02

delvin-fil
Зарегистрирован: 2015-11-27
Сообщения: 95
Репутация: +  4  -
Профиль   Отправить e-mail  

Удалить содержимое определенного тега

Приветствую всех!
Что то курение Лутца с Бизли мне на пользу не пошло…
В общем проблема такая:
Есть файл примерно такого содержания:

 <author>
      <first-name>Your</first-name>
      <last-name>Name</last-name>
      <nickname>and-tyut</nickname>
    </author>
<binary id="i.png" content-type="image/png">iVBORw0KGgoAAAANSUhEUgAAAL4
AAAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary>
<binary id="i2.png" content-type="image/png">iVBORw0KGgoAAAANSUhEUgAAAL4
AAAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary>
<binary id="i3.png" content-type="image/png">iVBORw0KGgoAAAANSUhEUgAAAL4A
AAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary>[
И нудно удалить содержимое тега <binary>
Вот так:
 check = "<binary id=\"i.png\" content-type=\"image/png\">iVBORw0KGgoA
AAANSUhEUgAAAL4AAAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary>"
a = re.sub(r'<binary(.*?)</binary>', 'Вот так и получилось', check)
print (a)
- работает
Вот так и получилось
А вот так:
 in_file = 'myfile'
f = open(in_file, "r")
lines = f.readlines()
f.close()
for i in lines:
  i = re.sub(r'(\n)', '', i)
  #line = i.rstrip('')
  m = re.sub(r'<binary(.*?)</binary>', 'БЯКА', i)
  print (m)
- нет
<author><first-name>Your</first-name><last-name>Name</last-name><nickname>and-tyut</nickname></author><binary id=“i.png” content-type=“image/png”>iVBORw0KGgoAAAANSUhEUgAAAL4AAAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary><binary id=“i2.png” content-type=“image/png”>iVBORw0KGgoAAAANSUhEUgAAAL4AAAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary><binary id=“i3.png” content-type=“image/png”>iVBORw0KGgoAAAANSUhEUgAAAL4AAAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary>
Как это победить?
Спасибо!



 import __hello__

Отредактировано delvin-fil (Апрель 15, 2017 19:25:44)

Офлайн

#2 Апрель 17, 2017 03:34:15

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

Удалить содержимое определенного тега

Не работает, т.к. readlines считывает по строкам, а в одну строку может и не попасть вся искомая конструкция c binary.
Попробуйте провести замену сразу для всего файла (если тот не большой), т.е. что-то вроде этого re.sub(your_pattern, '', f.read());
2) можно использовать библиотеку для обработки xml: lxml, BeautifulSoup

Офлайн

#3 Апрель 17, 2017 07:31:05

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Удалить содержимое определенного тега

для построчной обработки можно так:

 s = '''
<author>
      <first-name>Your</first-name>
      <last-name>Name</last-name>
      <nickname>and-tyut</nickname>
    </author>
<binary id="i.png" content-type="image/png">iVBORw0KGgoAAAANSUhEUgAAAL4
AAAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary>
<binary id="i2.png" content-type="image/png">iVBORw0KGgoAAAANSUhEUgAAAL4
AAAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary>
<binary id="i3.png" content-type="image/png">iVBORw0KGgoAAAANSUhEUgAAAL4A
AAFACAMAAAA1RTZyAAADAFBMVEUAAAABAQECAgIDAwMEBAQFBQUGBg</binary>
'''
lines = s.split('\n') #типа readlines
out = ''
flag = True
for i in lines:
    if i.startswith('<binary'):
        flag = False
        out +=  i.split('>')[0] +'>'
    if i.endswith('</binary>'):
        print out + '</binary>'
        out = ''
        flag = True
    else:
        if flag: print i

Отредактировано vic57 (Апрель 17, 2017 09:01:16)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version