#python #html
#python #HTML
Вопрос:
Допустим, у меня есть HTML (фактически электронное письмо), содержащий несколько <img>
файлов с cid: ссылкой. Я хотел бы, чтобы какой-нибудь код python заменял их один за другим на соответствующую версию исходного изображения base64. Я знаю, как получить изображение и закодировать их в base64, но как я могу заменить подмножества строки конкретными другими строками (закодированными вариантами изображений)…
replace(A, B) просто заменяет все на одно и то же… может ли кто-нибудь помочь мне в процессе мышления 🙂
Пример ввода:
><a href="https://urlshortener.teams.microsoft.com/8D8660148021F90-7-11" style="text-decoration:none">amp;nbsp;amp;nbsp;amp;nbsp;</a></td><td valign="middle" style="vertical-align:middle; font-size:0"><a href="https://urlshortener.teams.microsoft.com/8D8660148021F90-7-10" style="text-decoration:none"><img height="16" width="14" style="vertical-align:middle; height:16px; width:14px" data-outlook-trace="F:1|T:1" src="cid:9A5CA00DCF7842D99534F2F486FB7E5A"></a></td><td valign="middle" width="5" style="width:5px"><a href="https://urlshortener.teams.microsoft.com/8D8660148021F90-7-9" style="text-decoration:none">amp;nbsp;amp;nbsp;amp;nbsp;</a></td><td valign="middle"><a href="https://urlshortener.teams.microsoft.com/8D8660148021F90-7-8" style="vertical-al
Вывод был бы целым с src= заменен на
src="data:image/png;base64, <!-- base64encoded picture -->"
И это для каждого соответствующего изображения в исходной строке (html).
Заранее большое спасибо!
Комментарии:
1. Глядя на код,
document.replace('cid:9A5CA00DCF7842D99534F2F486FB7E5A', 'data:image/png;base64, <!-- base64encoded picture -->')
не работает?2. Да, но это заменило бы только одно конкретное событие.. Я хочу, чтобы все они были заменены соответствующими версиями в кодировке base64
3. Вы можете поместить
.replace(...)
внутри цикла, чтобы заменить все вхожденияcid:...
— найти всеcid:...
, поместить их в список, закодировать их в base64 и заменить их все.
Ответ №1:
Для тех, кому это может понадобиться. С помощью @Andrej Kesely я создал это решение:
@login_required
def get_mail(request):
message = Message.objects.get(pk=int(request.POST['id']))
html = message.html
.replace('<pre', '<code style="white-space: line-wrap;"')
.replace('</pre', '</code>')
for pic in re.finditer(r'cid:([^"] )', html):
attm = MessageAttachment.objects.get(message=message, headers__contains=pic[1])
b64 = base64.b64encode(open('/media/' str(attm.document), 'rb').read()).decode('utf-8')
html = re.sub(r'src=". "', f'src="data:image/jpeg;base64, {b64}"', html)
return render(request, "message.j2.html", {'message': message, 'html': html})