当前位置: 首页 > wzjs >正文

天津市工程建设交易网站查汗国数据指数

天津市工程建设交易网站查汗国,数据指数,厦门网站建设设,潍坊网络推广电话Python表格可视化工具:将HTML表格转换为精美图片 简介 在数据分析和报告撰写中,表格是不可或缺的工具。为了更好地展示数据,我们常常需要将表格转换为图片格式。本文将详细介绍一个Python工具类TableVisualizer,它可以将HTML表格…

Python表格可视化工具:将HTML表格转换为精美图片

简介

在数据分析和报告撰写中,表格是不可或缺的工具。为了更好地展示数据,我们常常需要将表格转换为图片格式。本文将详细介绍一个Python工具类TableVisualizer,它可以将HTML表格数据转换成美观的图片格式,适用于报告、演示或文档中展示表格数据的场景。

主要功能

  • 从JSON文件中读取HTML表格数据:通过解析JSON文件中的HTML字符串,提取表格数据。
  • 自定义表格样式:用户可以根据需求自定义表格的字体、颜色、大小等样式。
  • 支持单个文件处理和批量处理:不仅可以处理单个JSON文件,还支持批量处理文件夹中的所有JSON文件。
  • 高质量图片输出:生成的图片分辨率高,适合打印和展示。

代码详解

1. 初始化设置

在初始化方法中,我们设置了中文字体支持和默认的表格样式参数。

def __init__(self):# 设置中文字体plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 默认样式配置self.figure_size = (8, 3)self.font_size = 12self.table_scale = (1.2, 1.5)self.header_color = '#4a86e8'self.cell_color = '#ffffff'self.border_color = '#d3d3d3'
  • 中文字体支持:通过plt.rcParams设置中文字体,确保在图像中正确显示中文。
  • 样式参数:包括图像大小、字体大小、表格缩放比例、表头颜色、单元格颜色和边框颜色。

2. 数据加载

load_from_json方法用于从JSON文件中加载HTML表格数据。

def load_from_json(self, json_path):try:with open(json_path, 'r', encoding='utf-8') as f:data = json.load(f)html_table = data['html_str']dfs = pd.read_html(html_table)if not dfs:raise ValueError("未在HTML中找到表格")return dfs[0]except Exception as e:raise Exception(f"加载数据失败: {e}")
  • 文件读取:使用json.load读取JSON文件,并提取其中的HTML字符串。
  • 表格解析:利用pandas.read_html解析HTML字符串,提取表格数据。

3. 表格可视化

create_table_figure方法用于将DataFrame数据转换为图像。

def create_table_figure(self, df):plt.figure(figsize=self.figure_size)ax = plt.gca()ax.axis('off')# 创建表格并设置样式table = plt.table(cellText=df.values,colLabels=df.columns,cellLoc='center',loc='center',colColours=['#f3f3f3']*len(df.columns))# 设置表格样式table.auto_set_font_size(False)table.set_fontsize(self.font_size)table.scale(*self.table_scale)# 设置单元格样式for (row, col), cell in table.get_celld().items():if row == 0:cell.set_text_props(weight='bold', color='black')cell.set_facecolor(self.header_color)else:cell.set_facecolor(self.cell_color)cell.set_edgecolor(self.border_color)cell.set_linewidth(0.5)
  • 图像创建:使用matplotlib创建图像,并关闭坐标轴。
  • 表格样式:设置表格的字体大小、缩放比例、表头和单元格的颜色。
  • 单元格样式:为表头和普通单元格设置不同的样式,包括字体加粗、颜色和边框。

4. 保存图像

save_figure方法用于将生成的图像保存到文件。

def save_figure(self, output_path, dpi=300):try:plt.savefig(output_path,bbox_inches='tight',dpi=dpi,transparent=False)print(f"表格已成功保存为 {output_path}")finally:plt.close()
  • 图像保存:使用plt.savefig保存图像,指定分辨率和输出路径。
  • 资源释放:保存后关闭图像,释放内存。

5. 批量处理功能

batch_process方法支持批量处理文件夹中的所有JSON文件。

def batch_process(self, in_dir, save_dir):try:# 确保输出目录存在os.makedirs(save_dir, exist_ok=True)for root, _, files in os.walk(in_dir):for file in files:if file.endswith('.json'):json_path = os.path.join(root, file)output_filename = os.path.splitext(file)[0] + '.png'output_path = os.path.join(save_dir, output_filename)print(f"处理文件: {json_path}")self.visualize(json_path, output_path)except Exception as e:print(f"批量处理过程出错: {e}")
  • 目录遍历:使用os.walk遍历输入目录,查找所有JSON文件。
  • 文件处理:对每个JSON文件调用visualize方法,生成并保存图片。

使用示例

if __name__ == '__main__':visualizer = TableVisualizer()# 自定义样式visualizer.figure_size = (10, 4)visualizer.font_size = 14# 处理单个文件visualizer.visualize('test.json', 'table_visualization.png')# 批量处理visualizer.batch_process('input_folder', 'output_folder')
  • 单文件处理:通过visualize方法处理单个JSON文件。
  • 批量处理:通过batch_process方法处理整个文件夹中的JSON文件。

特色优势

  • 中文支持:内置中文字体配置,完美支持中文显示。
  • 样式可定制:提供丰富的样式参数配置,用户可以根据需求自定义。
  • 批量处理:支持批量转换多个文件,提高工作效率。
  • 错误处理:完善的异常处理机制,确保程序稳定运行。
  • 使用简单:接口设计直观,易于使用。

应用场景

  • 学术论文表格制作:将数据表格转换为高质量图片,便于插入论文。
  • 数据报告生成:快速生成数据报告中的表格图片。
  • 演示文稿制作:为演示文稿提供清晰美观的表格图片。
  • 文档自动化处理:在自动化文档生成流程中集成表格图片生成。

总结

TableVisualizer工具类提供了一个简单而强大的解决方案,可以轻松将HTML表格转换为美观的图片。通过简单的配置,就能生成适合各种场景使用的表格图片,大大提高了工作效率。希望这个工具能对大家有所帮助!如果您有任何改进建议,欢迎在评论区留言讨论。

完整代码

import pandas as pd
import matplotlib.pyplot as plt
import json
import os  # 添加os模块导入class TableVisualizer:"""HTML表格可视化工具类用于将HTML表格转换为美观的图片格式"""def __init__(self):"""初始化可视化器,设置中文字体等基本参数"""# 设置中文字体plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = False# 默认样式配置self.figure_size = (8, 3)self.font_size = 12self.table_scale = (1.2, 1.5)self.header_color = '#4a86e8'self.cell_color = '#ffffff'self.border_color = '#d3d3d3'def load_from_json(self, json_path):"""从JSON文件加载HTML表格数据Args:json_path (str): JSON文件路径Returns:pandas.DataFrame: 解析后的表格数据Raises:Exception: 文件读取或解析错误时抛出"""try:with open(json_path, 'r', encoding='utf-8') as f:data = json.load(f)html_table = data['html_str']dfs = pd.read_html(html_table)if not dfs:raise ValueError("未在HTML中找到表格")return dfs[0]except Exception as e:raise Exception(f"加载数据失败: {e}")def create_table_figure(self, df):"""创建表格图像Args:df (pandas.DataFrame): 要可视化的数据表格"""plt.figure(figsize=self.figure_size)ax = plt.gca()ax.axis('off')# 创建表格table = plt.table(cellText=df.values,colLabels=df.columns,cellLoc='center',loc='center',colColours=['#f3f3f3']*len(df.columns))# 设置表格样式table.auto_set_font_size(False)table.set_fontsize(self.font_size)table.scale(*self.table_scale)# 设置单元格样式for (row, col), cell in table.get_celld().items():if row == 0:cell.set_text_props(weight='bold', color='black')cell.set_facecolor(self.header_color)else:cell.set_facecolor(self.cell_color)cell.set_edgecolor(self.border_color)cell.set_linewidth(0.5)def save_figure(self, output_path, dpi=300):"""保存图像到文件Args:output_path (str): 输出文件路径dpi (int): 图像分辨率"""try:plt.savefig(output_path,bbox_inches='tight',dpi=dpi,transparent=False)print(f"表格已成功保存为 {output_path}")finally:plt.close()def visualize(self, json_path, output_path, dpi=300):"""完整的可视化流程Args:json_path (str): 输入JSON文件路径output_path (str): 输出图像文件路径dpi (int): 图像分辨率"""try:df = self.load_from_json(json_path)self.create_table_figure(df)self.save_figure(output_path, dpi)except Exception as e:print(f"可视化过程出错: {e}")def batch_process(self, in_dir, save_dir):"""批量处理文件夹中的所有JSON文件Args:in_dir (str): 输入文件夹路径,包含JSON文件save_dir (str): 输出文件夹路径,保存生成的图片"""try:# 确保输出目录存在os.makedirs(save_dir, exist_ok=True)for root, _, files in os.walk(in_dir):for file in files:if file.endswith('.json'):json_path = os.path.join(root, file)# 构建输出文件路径,使用save_dir作为保存目录output_filename = os.path.splitext(file)[0] + '.png'output_path = os.path.join(save_dir, output_filename)print(f"处理文件: {json_path}")self.visualize(json_path, output_path)except Exception as e:print(f"批量处理过程出错: {e}")# 使用示例
if __name__ == '__main__':visualizer = TableVisualizer()visualizer.figure_size = (10, 4)  # 修改图像大小visualizer.font_size = 14  # 修改字体大小visualizer.visualize(r'D:\1.代码\脚本\论文-英文-500\test.json', 'table_visualization.png')  # 注释掉原来的单文件处理#visualizer.batch_process(in_dir, save_dir)  # 添加save_dir参数

测试图片:
在这里插入图片描述
获取图中表格的html,本文采用kimi获取

{"html_str": "<table border='1'><tr><th>物料类型</th><th>物料描述</th><th>计量单位</th><th>数量</th><th>总价</th><th>备注</th></tr><tr><td>数据备份系统</td><td>VX1200</td><td>台</td><td>4</td><td>64000.00</td><td></td></tr><tr><td>数据备份系统</td><td>VX2400</td><td>台</td><td>2</td><td>56000.00</td><td></td></tr></table>"}

可视化后
在这里插入图片描述

http://www.dtcms.com/wzjs/108214.html

相关文章:

  • 党风廉政建设平台网站爱站网备案查询
  • 自己做优惠劵网站赚钱吗软文生成器
  • 北京知名网站建设公司排名廊坊网站建设优化
  • jq网站登录记住密码怎么做百度推广营销页
  • 重庆网站建设的意义广告优化师培训
  • 服务型网站有哪些石家庄seo外包公司
  • 企业网站建设遵循的原则磁力宅
  • 电子商务网站的建设与规划书怎么做谷歌推广
  • 无锡梦燕服饰网站谁做的深圳抖音seo
  • behance设计网站入口青岛seo外包公司
  • wordpress adsense integratorseo服务公司招聘
  • 宁夏手机网站建设推广普通话内容50字
  • 网站图片上传功能怎么做二十条优化措施原文
  • 做网站的公司 设计好南京广告宣传公司seo
  • 网站建设营销型号的区别上海好的seo公司
  • 做论文常用网站有哪些优化近义词
  • 哪个网站可以找做软件兼职的安卓在线视频嗅探app
  • 响应式网站怎么做mip整站seo优化哪家好
  • win7dw做asp购物网站天猫代运营
  • 政府电子网站建设解决方案商业推广软文范例
  • discuz网站搬家教程百度的特点和优势
  • 国外做地铁设计的公司网站网络营销包括几个部分
  • 把别人的图片拿来做网站网站优化系统
  • 网站推广每天必做的流程品牌宣传策划方案
  • 17一起做网店网站百度第三季度财报2022
  • 西安咪豆网站建设公司网站媒体推广方案
  • 用wordpress做购物网站营销推广公司案例
  • 手机wap网站导航模板seo管理系统创作
  • 遵义市播州区建设厅网站产品网络推广怎样做
  • 网站一般多少钱一年淘宝关键词指数查询