Python: String to HTML5 table 无外部模块

Python: String to HTML5 table without external modules

对 python 是全新的并且 运行 遇到了一个烦人的格式问题。我写了一个脚本来登录 Confluence 并发布内容。不幸的是,Confluence 页面只识别 HTML5 语法,并且格式化这种格式比我预期的要长。

我编辑了脚本,将所有 \n 个字符替换为 br \ 个字符,这让我变得很丑陋,但 respectable。为了真正整理好东西,理想情况下我想把整个东西都放在 table 中。

我已经在下面概述了我想要的 HTML5 代码,但我不知道 easiest/most 在不使用一些外部的情况下将这些标签添加到我的字符串 header1 header 2 header3 header4 header 5 10 15 20 27 to/path/foo.c 7 67 10 22 to/path/boo.c ...etc 之前的有效方法Python module/library。我相信使用 Python 2.7.5。

HTML5 生成下面 table 的代码

 <table style="width:100%" \>
   <tr \>
     <th \>Header1
     <th \>Header2  
     <th \>Header3
     <th \>Header4
     <th \>Header5
   <tr \>
     <td \>10
     <td \>15
     <td \>20
     <td \>27
     <td \>to/path/foo.c
   <tr \>
     <td \>7
     <td \>67       
     <td \>10
     <td \>22
     <td \>to/path/boo.c
   <tr \>
     <td \>1
     <td \>2    
     <td \>3
     <td \>4    
     <td \>to/path/moo.c
   <tr \>
     <th \> Sum:
   <tr \>
     <td \>18
     <td \>84
     <td \>33
     <td \>53

myDesiredTableFormat

      Header1 Header2 Header3 Header4  Header5
           10      15      20      27   to/path/foo.c
            7      67      10      22   to/path/boo.c
            1       2       3       4   to/path/moo.c

      Sum:          
           18      84      33      53     

我想写这个脚本的方式是:

  1. 一个嵌套的 for 循环(即每个 line/for 每个单词)
  2. <table style="width:100%" \><tr \> 添加到将存储此 table
  3. 的变量
  4. 如果 word = header 或 sum...前置 <th \>
  5. Else word = 数字或文件路径...前置 <td \>
  6. \n 替换为 <br \><tr \>

请告诉我有一种更简单、更有效(或优雅的方式)将字符串转换为 Python 中的 HTML5 table(即不使用我拥有的模块下载...使用该语言导入即可)。

这样的事情怎么样:

string = "header1 header2 header3 header4 header5 <br \> 10 15 20 27 to/path/foo.c <br \> 7 67 10 22 to/path/boo.c"
rows = string.split("<br \>")
data = map(lambda r: r.split(" "), rows)
html_rows = map(lambda r: "<td>" + "</td><td>".join(r) + "</td>", data)
html_table = "<table><tr>" + "</tr><tr>".join(html_rows) + "</tr></table>"

编辑:哦等等,我忘了 header 和求和行

string = "header1 header2 header3 header4 header5 <br \> 10 15 20 27 to/path/foo.c <br \> 7 67 10 22 to/path/boo.c"
// Make array of rows
rows = string.split("<br \>")
rows = map(lambda r: r.strip(" "), rows)
// Make array of arrays of column data
data = map(lambda r: r.split(" "), rows)
// The first row is header data; remove it
header_data = data.pop(0)
// HTML-ize each row
header_rows = "<th>" + "</th><th>".join(header_data) + "</th>"
html_rows = map(lambda r: "<td>" + "</td><td>".join(r) + "</td>", data)
// Concatenate everything into one table, but do not close it yet
html_table = "<table><tr>" + header_rows + "</tr><tr>" + "</tr><tr>".join(html_rows) + "</tr>"
// Total data and put it in Sum row
html_table += "<tr><th>Sum</th></tr>"
sums = [0, 0, 0, 0]
for row in data:
    sums[0] += int(row[0])
    sums[1] += int(row[1])
    sums[2] += int(row[2])
    sums[3] += int(row[3])

sums = map(str, sums)
// Add summation data and close the table
html_table += "<tr>" + "</tr><tr>".join(sums) + "</tr></table>"

请记住,此代码取决于分隔符是否非常一致:每列之间 space 一次,每行之间的确切字符串 <br \>