如何使用python将div添加到单词列表

时间:2019-05-01 07:25:46

标签: python

我正在尝试用标准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>

2 个答案:

答案 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

  • 读取包含单词列表的文件(每行1个元素)
with open('/path/to/list', 'r') as f:
    lines = f.readlines()
  • 创建所需的html:
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)