我正在尝试用标准HTML创建一个表。但是我有很多话要用div标签包裹。通常,我会在服务器端或其他方面进行操作,但这在该项目中不现实。因此,我仅限于普通的旧网络技术。不过,我想知道是否有Python解决方案来解决我的问题(即创建一个小脚本,以便我可以遍历给定单词的列表,输出所需的HTML,然后将HTML复制并粘贴到各种html文件中)。因此,如果我在下面有单词列表,可以运行python程序,然后将所需的div和类添加到每个单词中。一个问题是“顺序”需要增加到给定单词的数量。
单词
animals
cat
dog
mouse
lion
输出应该是
<div class="Rtable Rtable--1cols">
<div style="order:0" class="Rtable-cell-head">animals</div>
<div style="order:1;" class="Rtable-cell">cat</div>
<div style="order:2;" class="Rtable-cell">dog</div>
<div style="order:3;" class="Rtable-cell">mouse</div>
<div style="order:4;" class="Rtable-cell">lion</div>
</div>
答案 0 :(得分:3)
一个进阶解决方案:
from __future__ import print_function
from jinja2 import Template
template = Template("""
<div class="Rtable Rtable--1cols">
<div style="order:0" class="Rtable-cell-head">animals</div>
{%- for order, animal in animals %}
<div style="order:{{ order }};" class="Rtable-cell">{{ animal }}</div>
{%- endfor %}
</div>
""")
animals = """
cat
dog
mouse
lion
""".split()
print(template.render(animals=list(enumerate(animals, 1))))
输出:
<div class="Rtable Rtable--1cols">
<div style="order:0" class="Rtable-cell-head">animals</div>
<div style="order:1;" class="Rtable-cell">cat</div>
<div style="order:2;" class="Rtable-cell">dog</div>
<div style="order:3;" class="Rtable-cell">mouse</div>
<div style="order:4;" class="Rtable-cell">lion</div>
</div>
纯python版本:
from __future__ import print_function
template = """
<div class="Rtable Rtable--1cols">
<div style="order:0" class="Rtable-cell-head">animals</div>\
{animals}
</div>
"""
animal_template = """
<div style="order:{order};" class="Rtable-cell">{animal}</div>"""
animals = """
cat
dog
mouse
lion
""".split()
animal_divs = ''.join([animal_template.format(order=i, animal=animal)
for i, animal in enumerate(animals, 1)])
print(template.format(animals=animal_divs))
输出是相同的。
更新:Python拆分的最大便利是它删除了所有空格(包括换行符),但是,如果您在动物名中带有空格(例如"white rhino"
),则您将需要采取另一种方法,即按行拆分,从每行中删除任何空格,如果该行仅包含空格,则跳过该行:
animals = [animal.strip() for animal in """
cat
dog
mouse
lion
""".splitlines() if animal.strip()]
(此解决方案类似于下面的node.js解决方案)
但是,如果您的用户知道javascript而不是Python,那么node.js解决方案可能会更好:
const animals = `
cat
dog
mouse
lion
`.split('\n').map(v => v.trim()).filter(v => !!v);
const animal_template = (animal, order) => `<div style="order:${order+1};" class="Rtable-cell">${animal}</div>`;
const template = animals => `
<div class="Rtable Rtable--1cols">
<div style="order:0" class="Rtable-cell-head">animals</div>
${animals.map(animal_template).join('\n ')}
</div>`
console.log(template(animals));
答案 1 :(得分:1)
您可以使用bs4创建,操作和删除html:pip install beautifulsoup4
with open('/path/to/list', 'r') as f:
lines = f.readlines()
from bs4 import BeautifulSoup
# creating parent
soup = BeautifulSoup('<div class="Rtable Rtable--1cols"></div>')
# adding head
new_tag = soup.new_tag('div', **{'class': 'Rtable Rtable--1cols'})
new_tag.string = line[0]
soup.append(new_tag)
# adding elements
for i, line in enumerate(lines[1:]):
new_tag = soup.new_tag('div', **{'class': 'Rtable-cell', 'style': f'order:{i};'})
new_tag.string = line
soup.append(new_tag)
print(soup)