0

对 python 来说是全新的,并且遇到了一个烦人的格式问题。我编写了一个脚本来登录 Confluence 并发布内容。不幸的是,Confluence 页面只能识别 HTML5 语法,并且将这种格式设置为我所花费的时间比我预期的要长。

我编辑了脚本以用字符替换所有\n字符br \,这让我变得丑陋但可敬。为了真正收拾东西,理想情况下,我想把整个东西都放在桌子里。

我已经在下面概述了我想要的 HTML5 代码,但我不知道在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 模块/库的情况下将这些标签添加到我的字符串的最简单/最有效的方法。我相信使用 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 = 标题或总和...添加<th \>
  4. 其他单词 = 数字或文件路径...添加<td \>
  5. 替换\n<br \><tr \>

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

4

1 回答 1

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 \>每行之间的确切字符串。

于 2015-07-07T02:36:07.327 回答