近日有个小需求,要求收集统计一些信息上报,并直接在后台控制台打印,写入日志

为了美观,需要以表格形式展现数据,形如
虽说可以用 prettytable 实现这个效果,不过还得安装这个库,需求比较简单就不考虑安装第三方依赖了,所以得自己写

照着这个图,可以发现几个关键的实现点

  1. 由数据项的各个属性,整理出表头

  2. 计算每个属性对应的最大宽度,作为每列的宽度

  3. 每列左右留一些空

  4. 表头上下,以及数据项末尾添加一行 --±- 外围

  5. 循环每项,各项左右使用 | 做外围

  6. 需支持居中显示或左对齐,这些可以通过计算列的总长度,再补空格来实现 利用 .center .ljust 这些快捷方法

最终效果呢,还是阔以的

#!/usr/bin/python
# -*- coding: utf-8 -*-import time
import json# 数据项
timingInfo = [{'url': 'https://aaa.bbb.net/ccc/article/details/11','duration(ms)': 121.12,'start(ms)': 222,'type': 'html','size(kb)': 22.01
}, {'url': '/nd-element-in-list-to-another-list-of-strings','duration(ms)': 121.22,'start(ms)': 3332,'type': 'css','size(kb)': 22.01
}, {'url': '/path2','duration(ms)': '121.12434234 (1212312.12 + 121212)','start(ms)': 3332,'type': 'css','size(kb)': 22.01
}, {'url': '/nd-element-in-list-to-another-list-of-strings','duration(ms)': 121.42323423423,'start(ms)': 3332,'type': 'css','size(kb)': 22.01
}, {'url': 'path2','duration(ms)': '121.11 (111.11 + 20)','start(ms)': 3332,'type': 'css','size(kb)': 22.01
}]# 提取表头
keyHeader = timingInfo[0].keys()
# 存放每列的最大长度
keyMaxLen = {}for item in timingInfo:for i,h in enumerate(keyHeader):# 计算每个属性对应的最大长度maxLen = max(len(h), len(str(item[h])))if keyMaxLen.get(h, None):maxLen = max(maxLen, keyMaxLen[h])keyMaxLen[h] = maxLenprint keyMaxLen#
def printGroup(group):for item in group:print '\r'for i,h in enumerate(keyHeader):itemLen = keyMaxLen.get(h, str(h)) + 4# 补空位并居中s = str(item[h]).center(itemLen, '-' if item[h] == '-' else ' ')icon = '|'if item[h] == '-':icon = '+'s = (icon if i == 0 else '') + s[1:len(s)] + iconprint s,print '\r'print '\n[timing info]'# 占位项
tag = {}
for i,h in enumerate(keyHeader):tag[h] = '-'
# 前后添上
timingInfo.insert(0, tag)
timingInfo.append(tag)# 第一行需要先单独打印出来
printGroup([tag])# 再单独打印表头
for i,h in enumerate(keyHeader):# 留空位4itemLen = keyMaxLen.get(h, str(h)) + 4# 快捷居中并补空位  左对齐可使用 ljust之类s = h.center(itemLen)s = ('|' if i == 0 else '') + s[1:len(s)] + '|'print s,# 打印后面的数据项,包括两条 --+--占位
printGroup(timingInfo)

上面这个是直接打印出来的,print 默认一行打印,要做到按项拼接,就得在print后面加个逗号,

另外,这样只能在控制台输出,而如果要打印到日志中,就得换种做法了

使用字符串拼接,整个输出就是一个字符串,从头拼到末尾就ok了

当然嫌麻烦的话,也可以直接装了prettytable 直接用也行

import prettytable as pt# tb = pt.PrettyTable( ["City name", "Area", "Population", "Annual Rainfall"])
tb = pt.PrettyTable()
tb.field_names = ["City name", "Area", "Population", "Annual Rainfall"]
tb.add_row(["Adelaide",1295, 1158259, 600.5])
tb.add_row(["Brifasdfae",5905, 1857594, 1146.4])
tb.add_row(["Darwin", 112, 120900, 171423423423423424.7])
tb.add_row(["Hobart", 1357, 205556,619.5])print(tb)

转载自:https://www.cnblogs.com/imwtr/p/11062308.html

python如何以表格形式打印输出相关推荐

  1. element 表格宽度自适应_Python如何以表格形式打印输出!

    好久不见,风水轮流转,我竟然写写写python了 近日有个小需求,要求收集统计一些信息上报,并直接在后台控制台打印,写入日志 为了美观,需要以表格形式展现数据,形如 虽说可以用 prettytable ...

  2. python如何打印表格_python如何以表格形式打印输出

    好久不见,风水,我写了,写了python.最近,我有一个小需要收集数据和报告,并将它直接打印在背景控制台.为了美丽,数据需要显示在一个表的形式.虽然您可以使用prettytable来实现这种效果,你仍 ...

  3. 前端小知识:控制台打印(console)- 模拟Java日志打印、表格形式打印美化输出对象、代码运行时间统计

    文章目录 6. 控制台打印(Console) 模拟Java日志打印格式 美化对象打印(表格形式打印输出) 日志等级输出(让其在控制台显示时有颜色提示) 代码运行时间统计打印输出   6. 控制台打印( ...

  4. 【金融】【python】处理表格(*.xlsx)形式的期货数据

    [金融][python]处理表格(*.xlsx)形式的期货数据 数据读取 打开文件 截取特定列 处理脏数据/空数据 转换数据格式 处理数据索引和顺序 显示收盘价折线图 对读取后的数据进行处理 处理金融 ...

  5. python以表格形式打印出结果——PrettyTable

    有时候我们需要将结果以表格形式打印出,这样显得整齐美观,PrettyTable 就能实现. PrettyTable PrettyTable 是用于生成简单 ASCII 表的 Python 库. 它的灵 ...

  6. 【Python自动化办公】实现excel表中的数据批量导入到word指定位置(表格形式和下滑线形式)

    文章目录 案例1--word模板为表格 案例2--word模板中带有下划线形式 python docx基本操作 回到需求 案例1--word模板为表格 目的就是把excel中的数据,填入word模板中 ...

  7. python处理excel表格大小-如何用python处理excel表格

    前面我们已经学到了很多Python在数学领域的应用,用Python编程可以轻松解决一些数学中的常见问题.当然Python的功能应用还远远不止于此,我们的很多日常工作也可以用Python来实现.今天南京 ...

  8. Python操作Excel表格(二)

    Python操作Excel表格第二弹 本博客在前一篇博客基础上增加了若干函数,如按列寻找值,查重和增强型查重.数据写入等相关代码.实现了类似Sql的查询(注解中的SQL语句仅做参考,并非可执行SQL) ...

  9. python批量分析表格_老板让我从几百个Excel中查找数据,我用Python一分钟搞定!...

    以下文章来源: 早起Python 作者:陈熹 大家好,又到了Python办公自动化系列. 今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大! 一. ...

最新文章

  1. 【转】VMware虚拟机中CentOS设置固定IP
  2. 华为秘密作战计划曝光,重注研发AI芯片挑战英伟达,轮值董事长挂帅
  3. ISE中将Verilog封装为IP核的方法
  4. 图解使用CURL下载和上传文件
  5. TI Davinci DM6446 开发攻略(序)
  6. OpenWrt编程篇
  7. ubuntu运行python ide_打造vim中的python IDE
  8. msp430流水灯c语言程序,超详细msp430示例程序汇编.doc
  9. python复利计算函数_PyThon编程入门:了解python format格式化函数的使用
  10. htm怎么让图片和搜索框在同一行_对于优化来说,内链应该怎么使用你知道吗?...
  11. vue 指令 v-on 事件修饰符-键盘事件-键盘事件梳理
  12. win7禁用powershell_简述Windows 7中的Windows PowerShell功能
  13. Web开发:Apache2.2.x+Tomcat6.x+jk2.x做集群配置
  14. 「代码随想录」精讲了18道力扣上贪心算法经典题目,总结了这些!
  15. jq上下级元素查找方法
  16. android fastboot模式下载以及出现的问题
  17. java 刽子手游戏_刽子手游戏(Hangman Judge)
  18. 2、服务器系统:Windows Server 2012 操作系统
  19. 2021年春季 PAT乙级(复盘)
  20. 将jmeter响应结果中部分数据保存到本地文件

热门文章

  1. 论述word加密与破解的“矛”与“盾”!
  2. .net EF框架—增删改查—ajax删除
  3. 立敏RICHNEX AHD RX芯片介绍
  4. 现代战争中的电子干扰和反干扰技术
  5. 2022-2028全球与中国制药二次包装设备市场现状及未来发展趋势
  6. ZBrush 4R7正式上线
  7. ZBrush:自定义QuickSave路径
  8. ibm服务器内存型号_【IBM联想 46W0821 46W0823 16GB DDR4-2666 8GB, 服务器内存】价格_厂家 - 中国供应商...
  9. VM虚拟机去虚拟化教程(二)如何实现多开虚拟机 每个窗口独立硬件信息
  10. matlab烧到哪里,MATLAB在锅炉燃烧中的应用