Python:没有外部模块的字符串到HTML5表

时间:2015-07-07 02:03:11

标签: python html html5 confluence confluence-rest-api

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

我编辑了脚本,用\n个字符替换了所有br \个字符,这让我变得丑陋,但却受人尊敬。为了真正整理一下,我最好把这一切都放在一张桌子里。

我已经在下面概述了我想要的HTML5代码,但我不知道在不使用某些外部Python模块/库的情况下将这些标记添加到我的字符串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 2.7.5。

HTML5代码,用于生成下面的表格

 <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循环(即每行/每个单词)
  2. <table style="width:100%" \><tr \>添加到将存储此表的变量
  3. 如果word = header或sum ... prepend <th \>
  4. 其他字=数字或文件路径...前置<td \>
  5. \n替换为<br \><tr \>
  6. 请告诉我在Python中将字符串转换为HTML5表有一种更简单,更有效(或更优雅的方式)(即不使用我必须下载的模块......使用该语言的导入很好)。< / p>

1 个答案:

答案 0 :(得分:0)

这样的事情怎么样:

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>"

编辑:哦等等,我忘记了标题和汇总行

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>"

请记住,此代码依赖于分隔符非常一致:每列之间的空格,每行之间的确切字符串<br \>