Найти - Пользователи
Полная версия: Удалить содержимое определенного тега
Начало » Python для новичков » Удалить содержимое определенного тега
1
delvin-fil
Приветствую всех!
Что то курение Лутца с Бизли мне на пользу не пошло…
В общем проблема такая:
Есть файл примерно такого содержания:
 <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>
Как это победить?
Спасибо!
scidam
Не работает, т.к. readlines считывает по строкам, а в одну строку может и не попасть вся искомая конструкция c binary.
Попробуйте провести замену сразу для всего файла (если тот не большой), т.е. что-то вроде этого re.sub(your_pattern, '', f.read());
2) можно использовать библиотеку для обработки xml: lxml, BeautifulSoup
vic57
для построчной обработки можно так:
 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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB