例如,我有一个HTML Ordered List字符串。在有序列表中,我想写出n个列表。如何完成将列表添加到此字符串的任务?
以下是示例代码:
html = """
<ol>
<li>
<!--Something-->
</li>
... <!--n lists-->
{} #str().format()
<li>
<!--Something-->
</li>
</ol>
"""
for li in html_lists: #where li is <li>...</li> and is inside the python list.
html.format(li)
据我所知,字符串是不可变的,.format()
会在<li>
添加{}
。因此,这不适用于多个<li>
。
答案 0 :(得分:2)
就像你说的那样,字符串是不可变的,所以在一行上只有html.format(li)
不会做任何事情,你需要做html = html.format(li)
因为第一个版本不会修改html
在适当的位置,它会返回一个结果。
至于使用str.format()
的循环,您应该能够使用以下内容,假设html_lists
中的每个元素都是包含单个<li>
条目的字符串:
html = html.format('\n'.join(html_lists))
这是有效的,因为'\n'.join(html_lists)
将从您的字符串列表中构造一个字符串,然后可以将其传递给html.format()
,将{}
替换为html_lists
中每个元素的内容{1}}。请注意,您也可以使用''.join(html_lists)
,新行就是为了在显示html
时更具可读性。
答案 1 :(得分:0)
您可以使用lxml构建HTML:
import lxml.html as LH
import lxml.builder as builder
html_lists = 'one two three'.split()
E = builder.E
html = (
E.ol(
*([E.li('something')]
+ [E.li(item) for item in html_lists]
+ [E.li('else')])
)
)
print(LH.tostring(html, pretty_print=True))
打印
<ol>
<li>something</li>
<li>one</li>
<li>two</li>
<li>three</li>
<li>else</li>
</ol>
答案 2 :(得分:0)
Python非常适合处理文本,因此这里有一个使用它来做你想做的事的例子:
import textwrap
def indent(amt, s):
dent = amt * ' '
return ''.join(map(lambda i: dent+i+'\n', s.split('\n')[:-1])).rstrip()
ordered_list_html = textwrap.dedent('''\
<ol>
{}
</ol>
''')
# create some test data
html_lists = [textwrap.dedent('''\
<li>
list #{}
</li>
''').format(n) for n in xrange(5)]
print ordered_list_html.format(indent(2, ''.join(html_lists)))
输出:
<ol>
<li>
list #0
</li>
<li>
list #1
</li>
<li>
list #2
</li>
<li>
list #3
</li>
<li>
list #4
</li>
</ol>