Как использовать * args для создания нескольких HTML-таблиц из списков?

0

Я хотел бы создать функцию, которая может принимать произвольное количество списков, которые будут превращены в таблицы HTML, которые будут разделены перерывами для отправки электронной почты с несколькими таблицами.

Входы:

 lsta = [['a','b','c'],['1','2','3'],['d','e','f']]
 lstb = [['a','b','c'],['1','2','3'],['d','e','f']]
 lstc = [['a','b','c'],['1','2','3'],['d','e','f']]

Желаемый результат

 <TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">
 <TR>
<TD>a</TD>
<TD>b</TD>
<TD>c</TD>
</TR>
<TR>
<TD>1</TD>
<TD>2</TD>


 <TD>3</TD>
 </TR>
 <TR>
  <TD>d</TD>
  <TD>e</TD>
  <TD>f</TD>
 </TR>
</TABLE>

</br>

<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">
 <TR>
  <TD>a</TD>
  <TD>b</TD>
  <TD>c</TD>
 </TR>
 <TR>
  <TD>1</TD>
  <TD>2</TD>
  <TD>3</TD>
 </TR>
 <TR>
  <TD>d</TD>
  <TD>e</TD>
  <TD>f</TD>
 </TR>
</TABLE>

</br>

<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">
 <TR>
  <TD>a</TD>
  <TD>b</TD>
  <TD>c</TD>
 </TR>
 <TR>
  <TD>1</TD>
  <TD>2</TD>
  <TD>3</TD>
 </TR>
 <TR>
  <TD>d</TD>
  <TD>e</TD>
  <TD>f</TD>
 </TR>
</TABLE>

моя попытка:

 import HTML
def HtmlTablesfromLists(*args):
 [HTML.table(arg) + "</br> for arg in args]

Результат:

['<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">\n <TR>\n  <TD>a</TD>\n  <TD>b</TD>\n  <TD>c</TD>\n </TR>\n <TR>\n  <TD>1</TD>\n  <TD>2</TD>\n  <TD>3</TD>\n </TR>\n <TR>\n  <TD>d</TD>\n  <TD>e</TD>\n  <TD>f</TD>\n </TR>\n</TABLE></br>', '<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">\n <TR>\n  <TD>a</TD>\n  <TD>b</TD>\n  <TD>c</TD>\n </TR>\n <TR>\n  <TD>1</TD>\n  <TD>2</TD>\n  <TD>3</TD>\n </TR>\n <TR>\n  <TD>d</TD>\n  <TD>e</TD>\n  <TD>f</TD>\n </TR>\n</TABLE></br>', '<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">\n <TR>\n  <TD>a</TD>\n  <TD>b</TD>\n  <TD>c</TD>\n </TR>\n <TR>\n  <TD>1</TD>\n  <TD>2</TD>\n  <TD>3</TD>\n </TR>\n <TR>\n  <TD>d</TD>\n  <TD>e</TD>\n  <TD>f</TD>\n </TR>\n</TABLE></br>']

Бонусный вопрос:

Как я могу убедиться, что это правильно передано в следующую функцию

def GmailSend(self,email_subject,body_of_email):

    session = smtplib.SMTP('smtp.gmail.com', 587)
    session.ehlo()
    session.starttls()
    session.login(GMAIL_USERNAME, GMAIL_PASSWORD)
    headers = "\r\n".join(["from: " + GMAIL_USERNAME,
        "subject: " + email_subject,
        "to: " + recipient,
        "mime-version: 1.0",
        "content-type: text/html"])
    content = headers + "\r\n\r\n" + body_of_email
    session.sendmail(GMAIL_USERNAME, recipient, content)
Теги:
list
smtp
sublist

1 ответ

1
Лучший ответ

Вы почти там, join к элементам вашего текущего результирующего списка, где '' делает желаемую строку вывода:

In [16]: lst = ['<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">\n <TR>\n  <TD>a</TD>\n  <TD>b</TD>\n  <TD>c</TD>\n </TR>\n <TR>\n  <TD>1</TD>\n  <TD>2</TD>\n  <TD>3</TD>\n </TR>\n <TR>\n  <TD>d</TD>\n  <TD>e</TD>\n  <TD>f</TD>\n </TR>\n</TABLE></br>', '<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">\n <TR>\n  <TD>a</TD>\n  <TD>b</TD>\n  <TD>c</TD>\n </TR>\n <TR>\n  <TD>1</TD>\n  <TD>2</TD>\n  <TD>3</TD>\n </TR>\n <TR>\n  <TD>d</TD>\n  <TD>e</TD>\n  <TD>f</TD>\n </TR>\n</TABLE></br>', '<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">\n <TR>\n  <TD>a</TD>\n  <TD>b</TD>\n  <TD>c</TD>\n </TR>\n <TR>\n  <TD>1</TD>\n  <TD>2</TD>\n  <TD>3</TD>\n </TR>\n <TR>\n  <TD>d</TD>\n  <TD>e</TD>\n  <TD>f</TD>\n </TR>\n</TABLE></br>']

In [17]: print ''.join(lst)
<TABLE cellpadding="4" style="border: 1px solid #000000; border-collapse: collapse;" border="1">
 <TR>
  <TD>a</TD>
  <TD>b</TD>
  <TD>c</TD>
 </TR>
 <TR>
  <TD>1</TD>
  <TD>2</TD>
  <TD>3</TD>
 </TR>
 ....
</TABLE></br>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню