生成HTML代码的逻辑问题

时间:2012-11-17 05:27:10

标签: python html

我正在尝试使用下面的代码生成HTML代码(pastie链接),预期输出如下所示,我得到一个输出,其中CR值被添加两次,而且http链接也不对...任何人都可以帮助检查逻辑,看看我哪里出错了

我的代码: -

    http://pastie.org/5391102

输入低于

http://pastie.org/5390316(if you copy/paste ,make sure they are tab seperated,otherwise you will get a key error)

预期产出: -

<table cellspacing="1" cellpadding="1" border="1">
<tr>
<th bgcolor="#67B0F9" scope="col">CR</th>
<th bgcolor="#67B0F9" scope="col">FA</th>
 <th bgcolor="#67B0F9" scope="col">CL</th>
<th bgcolor="#67B0F9" scope="col">Title</th>
 </tr>
<tr>
 <td><a href="http://prism/CR/409452">409452</a></td>
 <td>WLAN</td>
<td>656885</td>
<td>Age out RSSI values from buffer </td>
</tr>
<tr>
<td><a href=http://data/409452>409452</a>,<a href=http://data/12345>12345</a></td>
<td></td>
<td></td>
<td>To Record HAL and SLM FW Event Logging</td>
</tr>
</table>

我目前的输出:

<table cellspacing="1" cellpadding="1" border="1">
<tr>
<th bgcolor="#67B0F9" scope="col">CR</th>
<th bgcolor="#67B0F9" scope="col">FA</th>
<th bgcolor="#67B0F9" scope="col">CL</th>
<th bgcolor="#67B0F9" scope="col">Title</th>
</tr>
 <tr>
  <td><a href="http://prism/CR/409452">409452</a></td>
<td><a href="http://prism/CR/409452">409452</a></td>
 <td><a href=http://prism/CR/Title>Title</a></td>
 <td>wlan</td>
 <td>656885</td>
 <td>Age out rssi values from buffer</td>
</tr>
 <tr>
<td><a href="http://prism/CR/409452, 12345">409452, 12345</a></td>
<td><a href="http://prism/CR/409452, 12345">409452, 12345</a></td>
<td><a href=http://prism/CR/Title>Title</a></td>
<td></td>
<td></td>
 <td>To Record HAL and SLM FW Event Logging</td>
 </tr>
</table>

1 个答案:

答案 0 :(得分:1)

这是我承诺的输入。

def CRlistToTable(CRlist):
    """ Create HTML table from CRlist data """
    CRstrings = ['<table cellspacing="1" cellpadding="1" border="1">']

    # create table's header row from the first row of CRlist
    BGCOLOR = '#67B0F9' # column header cells background color
    cols = CRlist[0]  # column names given in first row
    CRstrings += ['  <tr>', '\n'.join(
                  '    <th bgcolor="{}" scope="col">{}</th>'.format(BGCOLOR, col_name)
                     for col_name in cols),
                  '  </tr>']

    # create a template for remaining non-header table rows
    TR_TEMPLATE = ['  <tr>',
                   '    <td>',
                   '      {}',  # for dynamically generated CR links
                   '    </td>', '\n'.join(
                  ['    <td>{}</td>'] * (len(cols)-1)), # one per remaining cols
                   '  </tr>']
    TR_TEMPLATE = '\n'.join(TR_TEMPLATE) # convert to a string

    # apply the row template created to remaining CRlist rows
    CR_LINK_TEMPLATE = '<a href=http://data/{0}>{0}</a>'
    for row in CRlist[1:]:
        if ',' not in row[0]:  # no comma-delimited items in first column?
            links = CR_LINK_TEMPLATE.format(row[0])
        else:
            CRs = row[0].replace(',', ' ').split()
            links = ',\n      '.join(CR_LINK_TEMPLATE.format(cr) for cr in CRs)
        row[0] = links
        CRstrings += [TR_TEMPLATE.format(*row)]

    CRstrings += ["</table>"]

    # return string list merged to a single long newline-delimited string
    return '\n'.join(CRstrings) + '\n'


with open('cr_fixes_tabbed.xml') as file:
    xmldata = file.read()  # read entire file into memory

FIXES_START_TAG, FIXES_END_TAG = '<Fixes>, </Fixes>'.replace(',', ' ').split()
# embedded fixes info starts right after the tag itself within the xml data
xmlFixesStart = xmldata.find(FIXES_START_TAG) + len(FIXES_START_TAG)
xmlFixesEnd = xmldata.find(FIXES_END_TAG)

# extract portion of file data within the FIXES tags into a list of lines
info = xmldata[xmlFixesStart:xmlFixesEnd].strip().splitlines()

# split non-blank lines of tab-delimited data into list of rows of column data
CRlist = [line.split('\t') for line in info if line] # skips blank lines

crInfo = CRlistToTable(CRlist) # convert list into html table
print crInfo

输出:

<table cellspacing="1" cellpadding="1" border="1">
  <tr>
    <th bgcolor="#67B0F9" scope="col">CR</th>
    <th bgcolor="#67B0F9" scope="col">FA</th>
    <th bgcolor="#67B0F9" scope="col">CL</th>
    <th bgcolor="#67B0F9" scope="col">Title</th>
  </tr>
  <tr>
    <td>
      <a href=http://data/409452>409452</a>
    </td>
    <td>WLAN</td>
    <td>656885</td>
    <td>Age out RSSI values from buffer</td>
  </tr>
  <tr>
    <td>
      <a href=http://data/409452>409452</a>,
      <a href=http://data/12345>12345</a>
    </td>
    <td></td>
    <td></td>
    <td>To Record HAL and SLM FW Event Logging</td>
  </tr>
</table>

浏览器视图:

html output viewed in browser