Форум сайта python.su
Приветствую всех!
Что то курение Лутца с Бизли мне на пользу не пошло…
В общем проблема такая:
Есть файл примерно такого содержания:
<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>[
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)
Офлайн
Не работает, т.к. readlines считывает по строкам, а в одну строку может и не попасть вся искомая конструкция c binary.
Попробуйте провести замену сразу для всего файла (если тот не большой), т.е. что-то вроде этого re.sub(your_pattern, '', f.read());
2) можно использовать библиотеку для обработки xml: lxml, BeautifulSoup
Офлайн
для построчной обработки можно так:
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)
Офлайн