简体   繁体   中英

converting a list into a HTML table in python

Am having a text file where i read the content and assigning it to a variable. I need to put the contents in a HTML table. As of now, i wrote a python snippet to put the contents in a variable. How to convert it to a HTML table. I need to loop through the file and assign the variable and update the data as a field value in a table. How can i do it ? Help needed

My .txt file is

34,52,l,ma,cgb,eta
45,52,X,,lta,tox
67,52,V,nm,,oyt

My code to read is :

imp_auth = []
asn_eng = []


with open ("FR_list.txt","rt") as f:
 for line in f:
  (id,rel,sta,sev,ia,ae,iam,aem) = line.split(',')
  imp_auth.append(iam)
  asn_eng.append(aem)

You could use some of the available html templating engines and render the template.

For example, by using Jinja2 tempting engine

from jinja2 import Template
table = """
<table>
    {% for line in lines %}
    <tr>
        <td>{{ line[0] }}</td>
        <td>{{ line[1] }}</td>
        <td>{{ line[2] }}</td>
        ...
    </tr>
    {% endfor %}
</table>
"""
with open("FR_list.txt", "rt") as f:
    template = Template(table)
    t = template.render(lines=[line.split(',') for line in f])
    print(t)
    """
    <table>
        <tr>
            <td>34</td>
            <td>52</td>
            <td>l</td>
            ...
        </tr>
        ...
    </table>
    """

I would separate the things you're trying to do. Here's how I would do it (when not using some framework of some sort):

def parse(filename='content.txt'):
    with open(filename, 'r') as fh:
        for line in fh.readlines():
            row = [x.strip() for x in line.split(',')]
            if len(row) < 2: continue
            yield row[-2:] # iam,aem

def format_element(element):
    return '\n    <td>{elem}</td>'.format(elem=element)

def format_row(row): 
    return  '<tr>' + ''.join([format_element(element) for element in row]) + '\n</tr>'

with open('result.html', 'w') as output:
    for row in parse():    
        output.write(format_row(row))
        print format_row(row)

Here's the output I got:

<tr>
    <td>cgb</td>
    <td>eta</td>
</tr>
<tr>
    <td>lta</td>
    <td>tox</td>
</tr>
<tr>
    <td></td>
    <td>oyt</td>
</tr>
You can use the following
imp_auth = []
with open ("tt.txt","rt") as f:
    for line in f:
        (id,rel,sta,sev,iam,aem) = line.split(',')
        imp_auth.append((id,rel,sta,sev,iam,aem.replace('\n','')))
result = '<table>'
result += '<th>col1</th><th>col2</th><th>col3</th>'
result += '<th>col4</th><th>col5</th><th>col6</th>'
for t in range(0,len(imp_auth)):
    for ele in imp_auth[t]:        
        result += '<tr>'
        result += '<td>ele[0]</td>ele[1]<td>ele[2]</td>'
        result += '<td>ele[3]</td>ele[4]<td>ele[5]</td>'
        result += '</tr>'

result += '</table>'    

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM