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 相关文章推荐
简单的Python2.7编程初学经验总结
Apr 01 Python
浅析Python中的序列化存储的方法
Apr 28 Python
理解python正则表达式
Jan 15 Python
Flask框架响应、调度方法和蓝图操作实例分析
Jul 24 Python
浅析Python 3 字符串中的 STR 和 Bytes 有什么区别
Oct 14 Python
Python批处理更改文件名os.rename的方法
Oct 26 Python
利用python提取wav文件的mfcc方法
Jan 09 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
python之生产者消费者模型实现详解
Jul 27 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
Python基于百度AI实现OCR文字识别
Apr 02 Python
Python实战之实现简易的学生选课系统
May 25 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
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
php 判断字符串中是否包含html标签
2014/02/17 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
实用的PHP带公钥加密类分享(每次加密结果都不一样哦)
2014/08/20 PHP
PHP使用Curl实现模拟登录及抓取数据功能示例
2018/04/27 PHP
PHP微商城开源代码实例
2019/03/27 PHP
使用onbeforeunload属性后的副作用
2007/03/08 Javascript
js取得url地址参数实例
2013/02/22 Javascript
ECMAScript5(ES5)中bind方法使用小结
2015/05/07 Javascript
Javascript节点关系实例分析
2015/05/15 Javascript
基于BootStrap的图片轮播效果展示实例代码
2016/05/23 Javascript
jQuery实现右下角可缩放大小的层完整实例
2016/06/20 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
利用Vue构造器创建Form组件的通用解决方法
2018/12/03 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
[01:15]PWL S2开团时刻第二期——他们杀 我就白给
2020/11/25 DOTA
python基础教程之元组操作使用详解
2014/03/25 Python
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
python算法表示概念扫盲教程
2017/04/13 Python
Windows下Anaconda2安装NLTK教程
2018/09/19 Python
Python2与Python3的区别实例总结
2019/04/17 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
2020/08/28 Python
CSS 说明横向进度条最后显示文字的实现代码
2020/11/10 HTML / CSS
努比亚手机官网:nubia
2016/10/06 全球购物
kfc实习自我鉴定
2013/12/14 职场文书
关于礼仪的演讲稿
2014/01/04 职场文书
学校联谊活动方案
2014/02/15 职场文书
岗位职责说明书
2014/05/07 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
2014年作风建设剖析材料
2014/10/23 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
python实现股票历史数据可视化分析案例
2021/06/10 Python