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
我想写这个脚本的方式是:
- 一个嵌套的 for 循环(即每个 line/for 每个单词)
- 将
<table style="width:100%" \><tr \>
添加到将存储此 table 的变量
- 如果 word = header 或 sum...前置
<th \>
- Else word = 数字或文件路径...前置
<td \>
- 将
\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 \>
。
对 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
我想写这个脚本的方式是:
- 一个嵌套的 for 循环(即每个 line/for 每个单词)
- 将
<table style="width:100%" \><tr \>
添加到将存储此 table 的变量
- 如果 word = header 或 sum...前置
<th \>
- Else word = 数字或文件路径...前置
<td \>
- 将
\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 \>
。