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中的readline()方法的使用
May 24 Python
浅谈Python基础之I/O模型
May 11 Python
python中模块查找的原理与方法详解
Aug 11 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
numpy找出array中的最大值,最小值实例
Apr 03 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
python版百度语音识别功能
Jul 09 Python
解决pandas展示数据输出时列名不能对齐的问题
Nov 18 Python
python使用turtle库绘制奥运五环
Feb 24 Python
django model通过字典更新数据实例
Apr 01 Python
解决pytorch 数据类型报错的问题
Mar 03 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
PHP 图像尺寸调整代码
2010/05/26 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
php将字符串转换为数组实例讲解
2020/05/05 PHP
使用IE的地址栏来辅助调试Web页脚本
2007/03/08 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
AngularJs Managing Service Dependencies详解
2016/09/02 Javascript
JavaScript实现url参数转成json形式
2016/09/25 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
基于zepto.js实现手机相册功能
2017/07/11 Javascript
JavaScript中运算符规则和隐式类型转换示例详解
2017/09/06 Javascript
React Native中Navigator的使用方法示例
2017/10/13 Javascript
jquery实现楼层滚动效果
2018/01/01 jQuery
vue中使用cropperjs的方法
2018/03/01 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
浅析Vue 生命周期
2018/06/21 Javascript
微信小程序自定义组件实现tabs选项卡功能
2018/07/14 Javascript
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python实现将汉字转换成汉语拼音的库
2015/05/05 Python
Python中random模块用法实例分析
2015/05/19 Python
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
在 Python 中接管键盘中断信号的实现方法
2020/02/04 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
大学活动策划书范文
2014/01/10 职场文书
食品安全承诺书
2014/05/22 职场文书
大学新闻系应届生求职信
2014/06/02 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
卖房协议书样本
2014/10/30 职场文书
党员自评材料范文
2014/12/17 职场文书
测量员岗位职责
2015/02/14 职场文书
python+opencv实现目标跟踪过程
2022/06/21 Python
全网非常详细的pytest配置文件
2022/07/15 Python