python如何以表格形式打印输出的方法示例


Posted in Python onJune 21, 2019

好久不见,风水轮流转,我竟然写写写python了

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

为了美观,需要以表格形式展现数据,形如

python如何以表格形式打印输出的方法示例

虽说可以用 prettytable 实现这个效果,不过还得安装这个库,需求比较简单就不考虑安装第三方依赖了,所以得自己写

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

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

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

3. 每列左右留一些空

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

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

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

最终效果呢,还是阔以的

python如何以表格形式打印输出的方法示例

#!/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] = maxLen

print 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)] + icon
      print 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):
  # 留空位4
  itemLen = 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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python动态性强类型用法实例
May 09 Python
Python数据结构与算法之图结构(Graph)实例分析
Sep 05 Python
Centos7 Python3下安装scrapy的详细步骤
Mar 15 Python
Python实现简单层次聚类算法以及可视化
Mar 18 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
Dec 12 Python
pytorch逐元素比较tensor大小实例
Jan 03 Python
基于django 的orm中非主键自增的实现方式
May 18 Python
浅析python中的del用法
Sep 02 Python
Python爬取酷狗MP3音频的步骤
Feb 26 Python
基于Python和openCV实现图像的全景拼接详细步骤
Oct 05 Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 #Python
对pyqt5之menu和action的使用详解
Jun 20 #Python
对PyQt5中的菜单栏和工具栏实例详解
Jun 20 #Python
PyQt QCombobox设置行高的方法
Jun 20 #Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 #Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
Jun 20 #Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
Jun 20 #Python
You might like
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
php在线代理转向代码
2012/05/05 PHP
PHP 使用MySQL管理Session的回调函数详解
2013/06/21 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
2015/10/27 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
js 函数的副作用分析
2011/08/23 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
jQuery在html有效在jsp无效的原因及解决方法
2013/08/02 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
基于JS实现PHP的sprintf函数实例
2015/11/14 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
详解使用VueJS开发项目中的兼容问题
2018/08/02 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
微信小程序开发之转发分享功能
2019/10/22 Javascript
微信小程序(订阅消息)功能
2019/10/25 Javascript
[04:40]2016个国际邀请赛中国区预选赛场地——华西村观战指南
2016/06/25 DOTA
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python中使用logging模块打印log日志详解
2015/04/05 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
Anaconda下安装mysql-python的包实例
2018/06/11 Python
python实现快递价格查询系统
2020/03/03 Python
python字符串拼接+和join的区别详解
2020/12/03 Python
python 录制系统声音的示例
2020/12/21 Python
Steve Madden官网:美国鞋类品牌
2017/01/29 全球购物
台湾团购、宅配和优惠券:17Life
2017/08/14 全球购物
大学生优秀的自我评价分享
2013/10/22 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
《角的初步认识》教学反思
2016/02/17 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
详解JavaScript的计时器和按钮效果设置
2022/02/18 Javascript