pri*_*stc 19 python html-table html-generation
假设我有一个这样的列表:
['one','two','three','four','five','six','seven','eight','nine']
Run Code Online (Sandbox Code Playgroud)
我想尝试将这些数据转换为各种维度的HTML表格:
one two three
four five six
seven eight nine
Run Code Online (Sandbox Code Playgroud)
要么
one four seven
two five eight
three six nine
Run Code Online (Sandbox Code Playgroud)
要么
one two three four
five six seven eight
nine
Run Code Online (Sandbox Code Playgroud)
是否有一个库可以处理这个,而不需要做疯狂的列表拼接或嵌套的循环?我的谷歌搜索显示有一些HTML库,但我没有时间浏览每一个,看看他们是否可以很好地处理表.有没有人不得不这样做?如果是这样你是怎么做到的?
Ale*_*lli 29
我会将你的问题分解为两部分:
我认为这两个任务真的非常截然不同,并且没有任何东西可以获得(并且输掉很多),所以如果任何精心设计的图书馆如此蠢蠢欲动,我会感到惊讶.
对于第1点,行主要很容易:
def row_major(alist, sublen):
return [alist[i:i+sublen] for i in range(0, len(alist), sublen)]
Run Code Online (Sandbox Code Playgroud)
和列专业并没有那么糟糕:
def col_major(alist, sublen):
numrows = (len(alist)+sublen-1) // sublen
return [alist[i::sublen] for i in range(numrows)]
Run Code Online (Sandbox Code Playgroud)
例如...:
L = ['one','two','three','four','five','six','seven','eight','nine']
for r in row_major(L, 3): print r
print
for r in col_major(L, 3): print r
for r in row_major(L, 4): print r
Run Code Online (Sandbox Code Playgroud)
产生你想要的三个结果(每行一个列表,不是HTML格式;-).
问题的后半部分 - 从字符串列表列表中生成HTML表:
def html_table(lol):
print '<table>'
for sublist in lol:
print ' <tr><td>'
print ' </td><td>'.join(sublist)
print ' </td></tr>'
print '</table>'
Run Code Online (Sandbox Code Playgroud)
如果您想将其作为单个字符串而不是将其打印出来,请将每个字符串更改print为yield并使用'\n'.join(html_table(lol)).
现在,您有两个简单,有用,可用且可重用的构建块 - 只要您想要将数据呈现为HTML表格,并且每当列表列表呈现为HTML时,将它们分开就会派上用场表来自任何其他构建它的方式.将它们组合在一起很容易在应用程序代码中完成,但当然也很容易做一个简单的"粘合例程",例如,假设yield基于版本的版本html_table并且需要单个字符串结果:
def list_to_html_table(alist, sublength, column_major=False):
if column_major:
lol = col_major(alist, sublength)
else:
lol = row_major(alist, sublength)
return ''.join(html_table(lol))
Run Code Online (Sandbox Code Playgroud)
难道这种积木式方法不比使用大块胶水的胶水编程更好,更舒适,更高效吗? - - )
仅供将来参考,我实现了一个名为simpletable的小型Python模块,以提供简单的HTML表生成.它还涉及这个问题中描述的问题.
用法如下:
import simpletable
test_data = [str(x) for x in range(20)]
formatted_data = simpletable.fit_data_to_columns(test_data, 5)
table = simpletable.SimpleTable(formatted_data)
html_page = simpletable.HTMLPage(table)
html_page.save("test_page.html")
Run Code Online (Sandbox Code Playgroud)
由于它不需要第三方软件包,您只需从我的存储库中获取代码并在项目中使用它.
使用列表
from tabulate import tabulate
table = [['one','two','three'],['four','five','six'],['seven','eight','nine']]
print(tabulate(table, tablefmt='html'))
Run Code Online (Sandbox Code Playgroud)
产生以下输出。
<table>
<tbody>
<tr><td>one </td><td>two </td><td>three</td></tr>
<tr><td>four </td><td>five </td><td>six </td></tr>
<tr><td>seven</td><td>eight</td><td>nine </td></tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
另一种选择很漂亮:
from prettytable import PrettyTable
pt = PrettyTable()
Run Code Online (Sandbox Code Playgroud)
如果要生成html格式:
print(pt.get_html_string())
Run Code Online (Sandbox Code Playgroud)
如果只生成ascii格式表:
print(pt.get_string())
Run Code Online (Sandbox Code Playgroud)
请参考官方文档:https : //ptable.readthedocs.io/en/latest/tutorial.html了解更多选项,例如启用不同类型的样式。
请享用。
| 归档时间: |
|
| 查看次数: |
58341 次 |
| 最近记录: |