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中使用NLTK库实现对词干的提取的教程
Apr 08 Python
python结合shell查询google关键词排名的实现代码
Feb 27 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
TensorFlow实现Batch Normalization
Mar 08 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
python中virtualenvwrapper安装与使用
May 20 Python
Python Dataframe 指定多列去重、求差集的方法
Jul 10 Python
python 自动批量打开网页的示例
Feb 21 Python
Python的几种主动结束程序方式
Nov 22 Python
Python+OpenCV实现将图像转换为二进制格式
Jan 09 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
Python中对象的比较操作==和is区别详析
Feb 12 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
全国FM电台频率大全 - 29 青海省
2020/03/11 无线电
PHP 分页类(模仿google)-面试题目解答
2009/09/13 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
JS分割字符串并放入数组的函数
2011/07/04 Javascript
Jquery 数据选择插件Pickerbox使用介绍
2012/08/24 Javascript
jQuery下拉友情链接美化效果代码分享
2015/08/26 Javascript
Javascript刷新窗口方法小结
2015/10/21 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
基于JavaScript实现的顺序查找算法示例
2017/04/14 Javascript
node+express+ejs使用模版引擎做的一个示例demo
2017/09/18 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
vue 1.0 结合animate.css定义动画效果
2018/07/11 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
python中使用PIL制作并验证图片验证码
2018/03/15 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
利用python实现周期财务统计可视化
2019/08/25 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
思想汇报范文
2013/11/04 职场文书
大学生职业生涯规划方案
2014/01/03 职场文书
心理健康教育制度
2014/01/27 职场文书
学生周末长期请假条
2014/02/15 职场文书
幼儿园中班下学期评语
2014/04/18 职场文书
战略合作意向书
2014/07/29 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
公司离职证明标准样本
2014/10/05 职场文书
2014法制宣传日活动总结范文
2014/11/01 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
幸福来敲门观后感
2015/06/04 职场文书
鸦片战争观后感
2015/06/09 职场文书