整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

如何用python生成简单的html report报告

提:

用python写了一个简单的log分析,主要也就是查询一些key,value出来,后面也可以根据需求增加。查询出来后,为了好看,搞个html 表格来显示。

需要的组件: jinja2 flask 的模板。

先说下设计思路,主要是练习python代码玩,高手略过

模拟scrapy,搞个管线


每个管线分预处理,分析器,和后处理。预处理的话,可以筛选下数据,分析器提取关键信息,然后把结果丢给后处理。html报表就是在后处理生成。

再搞个manger类,管理很多个管线,虽然现在单路pipeLine就完成了,说不定以后还能扩展呢。



我们可以定义预处理,比如过滤一些不关注的关键字,或者关注一些特定关键字的行


预处理的话,只处理QtiDCT-C关键字的日志行。

然后把经过预处理后的数据丢给分析器

主要查询行数据行里面是否有keyword,然后根据分隔符,和结束符来提取内容

keyword delimiter xxxxxendwith 这样个模式

获取最终结果存储到字典里面 result[keyword]=xxxx。这里会trim,去掉 \r\n.

这样就有了结果集result.最后丢给posthandler 后处理。完成报表输出。


后处理主要是用jinja2的模板,然后传递参数,生成最终的html文件。

这里的jinja_template.temple, 内容如下



有了模板,就可以在渲染模板的时候提供字典,变量,在模板里面显示。最终完成报表的输出。


最终使用


最终在main 方法中,通过-d参数传入log所在目录,然后迭代所有的文件,使用input 把文本文件转换成行数据的list,丢给管线,最后把管线丢给manager,调用process ,完成txt日志的分析,到最后html的生产。

编程中,有时候需要以表格的形式输出数据,使其更易于阅读和理解。Python提供了多种方法来创建和输出表格数据。本文将介绍如何使用不同的方法制作输出表格,并提供详细的示例代码,以帮助大家更好地理解和应用这些技巧。

使用制表符(Tab)分隔列

最简单的方法是使用制表符(Tab)字符来分隔列,这种方式适用于文本输出。

以下是一个示例:

# 数据
data = [
    ["Name", "Age", "City"],
    ["Alice", "30", "New York"],
    ["Bob", "25", "Los Angeles"],
    ["Charlie", "35", "Chicago"]
]

# 输出表格
for row in data:
    print("\t".join(row))

在这个示例中,首先定义了一个包含表格数据的列表data,然后使用join()方法将每一行的数据以制表符分隔并输出到屏幕上。

使用字符串格式化

Python的字符串格式化功能可以更灵活地控制输出表格的样式。可以使用str.format()方法或f-字符串来格式化输出。

以下是一个示例:

# 数据
data = [
    ["Name", "Age", "City"],
    ["Alice", "30", "New York"],
    ["Bob", "25", "Los Angeles"],
    ["Charlie", "35", "Chicago"]
]

# 输出表格
for row in data:
    print("{:<10} {:<5} {:<10}".format(*row))

在这个示例中,使用字符串格式化来定义每列的宽度,并使用<来指定左对齐。这样可以确保表格数据在列中对齐。

使用第三方库

如果需要更复杂的表格操作,可以考虑使用第三方库,如tabulateprettytable。这些库提供了更多的功能和选项来创建和输出表格。

以下是使用tabulate库的示例:

from tabulate import tabulate

# 数据
data = [
    ["Name", "Age", "City"],
    ["Alice", "30", "New York"],
    ["Bob", "25", "Los Angeles"],
    ["Charlie", "35", "Chicago"]
]

# 输出表格
print(tabulate(data, headers="firstrow", tablefmt="grid"))

这个示例中,首先安装tabulate库(使用pip install tabulate),然后使用它的tabulate()函数来输出表格。可以指定不同的输出格式,例如,tablefmt="grid"用于创建网格形式的表格。

使用HTML表格

如果需要在网页上显示表格,可以考虑使用HTML表格。

以下是一个示例,演示如何使用Python生成HTML表格:

# 数据
data = [
    ["Name", "Age", "City"],
    ["Alice", "30", "New York"],
    ["Bob", "25", "Los Angeles"],
    ["Charlie", "35", "Chicago"]
]

# 生成HTML表格
html_table = "<table>"
for row in data:
    html_table += "<tr>"
    for cell in row:
        html_table += "<td>{}</td>".format(cell)
    html_table += "</tr>"
html_table += "</table>"

# 输出HTML
print(html_table)

在这个示例中,使用循环生成HTML标签,以创建包含表格数据的HTML表格。这个方法适用于在网页上显示数据。

使用 Pandas 库创建表格

Pandas 是一个强大的数据分析库,它提供了灵活的数据结构和数据操作功能,包括表格的创建和处理。

以下是一个示例,演示如何使用 Pandas 创建和输出表格:

import pandas as pd

# 数据
data = [
    ["Name", "Age", "City"],
    ["Alice", 30, "New York"],
    ["Bob", 25, "Los Angeles"],
    ["Charlie", 35, "Chicago"]
]

# 创建DataFrame对象
df = pd.DataFrame(data[1:], columns=data[0])

# 输出表格
print(df)

在这个示例中,首先导入 Pandas 库,并将表格数据存储在一个列表中。然后,使用 Pandas 的 DataFrame 对象来创建表格,并通过 print() 函数输出。Pandas 提供了丰富的数据操作和分析功能,可以轻松处理大规模数据集。

使用 PrettyTable 库创建表格

另一个创建和输出表格的库是 PrettyTable,它提供了一种简单的方式来创建漂亮的文本表格。

以下是一个示例:

from prettytable import PrettyTable

# 数据
data = [
    ["Name", "Age", "City"],
    ["Alice", 30, "New York"],
    ["Bob", 25, "Los Angeles"],
    ["Charlie", 35, "Chicago"]
]

# 创建PrettyTable对象
table = PrettyTable(data[0])
for row in data[1:]:
    table.add_row(row)

# 输出表格
print(table)

在这个示例中,首先安装 PrettyTable 库(使用 pip install prettytable),然后创建一个 PrettyTable 对象,并使用 add_row() 方法添加行数据。最后,通过 print() 函数输出漂亮的文本表格。

使用终端表格库创建表格

如果希望在终端中以更美观的方式显示表格,可以考虑使用终端表格库,如 terminaltables

以下是一个示例:

from terminaltables import AsciiTable

# 数据
data = [
    ["Name", "Age", "City"],
    ["Alice", 30, "New York"],
    ["Bob", 25, "Los Angeles"],
    ["Charlie", 35, "Chicago"]
]

# 创建AsciiTable对象
table = AsciiTable(data)

# 输出表格
print(table.table)

在这个示例中,首先安装 terminaltables 库(使用 pip install terminaltables),然后创建一个 AsciiTable 对象,并通过 table 属性输出表格。这种方式在终端中以更漂亮的方式显示表格。

总结

制作输出表格在各种情况下都是有用的,无论是文本报告、数据分析还是终端应用。Python 提供了多种方法和库来创建和输出表格,可以根据具体需求选择最适合的方法。希望本文中的示例代码能帮助大家更好地处理表格数据,并提高编程效率。无论你是初学者还是有经验的开发者,掌握这些表格处理技巧都将是一个有用的技能。

面的制作一直是 Python 的痛!使用 Python 制作桌面端界面是非常痛苦的过程(又难学又难看)。不过,Python 已经出现了几个基于web前端的库,他们的基本机制大同小异,如果对 界面操作性没有太大要求,那么这些库就比较适合你

这个系列基于 pywebio 的一系列实战应用,让我们从实战中学习这个库的使用!

如果对你有帮助,记得转发推荐给你的好友!

你的点赞、收藏是对我的最大鼓励!

本节源码回复"pywebio"即可获取

本节最终效果动图:

  • 选择 excel 文件
  • 输出文件第一个工作表的数据(DataFrame)

安装库:

pip install -U pywebio

输出文本

先输出一段内容试试效果:

import pywebio
import pywebio.output as output

def main():
    output.put_html('表格显示程序')


if __name__=='__main__':
    pywebio.start_server(main, port=8080, debug=True, cdn=False,auto_open_webbrowser=True)
  • 行1,2:导入需要的东西,其中 pywebio.output 是用来输出内容相关操作
  • 行4:定义一个函数,名字随意
  • 行5:put_html 这个函数就是行2导入的 output 模块的操作,用来输出 html 内容
  • 行9:启动服务。这大部分是样板代码(就是每次都一样的)。特别重要的是第一个参数,就是我们定义的函数名字(注意并没有执行,只是传入)

执行这段脚本,如无意外你的浏览器就启动了一页,地址是 http://localhost:8080

如果你不熟悉 html 的各种标签,你可能连基本的排版都做不到。

这还好,pywebio 还支持 markdown:

def main():
    output.put_markdown('# 表格显示程序')
    output.put_markdown('功能如下:')
    output.put_markdown("""
- 选择文件
- 自动加载输出表格一部分内容
    """)

输入操作

只有输出操作是满足不了需求,界面上很多输入操作。

选择文件就是一种输入操作(用户输入内容到界面上):

import pywebio
import pywebio.output as output
import pywebio.input as input

def main():
    output.put_markdown('# 表格显示程序')
    output.put_markdown('功能如下:')
    output.put_markdown("""
- 选择文件
- 自动加载输出表格一部分内容
    """)

    file = input.file_upload('选择一个excel文件','.xlsx')
  • 行3:导入输入操作模块
  • 行13:使用 file_upload 用来让用户选择文件上传。第一个参数是提示内容,第二个参数是限定文件后缀名
  • 用户选择的文件将会赋值到变量 file

看看效果:

点击右边的"Browse"按钮,即可从弹窗中选择excel文件。

点击提交按钮后,之前的代码就会继续往下执行。

有了文件内容,我们用 pandas 读取:

import pywebio
import pywebio.output as output
import pywebio.input as input
import pandas as pd

def main():
    output.put_markdown('# 表格显示程序')
    output.put_markdown('功能如下:')
    output.put_markdown("""
- 选择文件
- 自动加载输出表格一部分内容
    """)

    file = input.file_upload('选择一个excel文件','.xlsx')
    df = pd.read_excel(file['content'])
    output.put_html(df.head(10).to_html())
  • 行15:通过 file['content'] 获取文件内容。
  • 行16:df.to html() 就能生成完整的表格 html ,然后用 put html 输出即可

看看效果:


重点

最终的代码如下:

import pywebio
import pywebio.output as output
import pywebio.input as input
import pandas as pd

def main():
    output.put_markdown('# 表格显示程序')
    output.put_markdown('功能如下:')
    output.put_markdown("""
- 选择文件
- 自动加载输出表格一部分内容
    """)

    file = input.file_upload('选择一个excel文件','.xlsx')
    df = pd.read_excel(file['content'])
    output.put_html(df.head(10).to_html())
  • 所有的input操作代码,都会等待界面操作完毕才会往下执行。例如行14 file_upload 会一直卡住,直到界面上点击 "提交" 按钮
  • 按照上面的流程,这个函数将会执行完毕。如果希望重新执行一次,只需要刷新一下浏览器的页面

只是加载数据太没趣了?下一节将进一步改进,加载数据后可以对数据查询

推荐阅读:

  1. Python动态交互系列(01),不用改代码,点点按钮就可以完成
  2. 懂Excel轻松入门Python数据分析包pandas(29):轻松做出筛选控件