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中使用异步Socket编程性能测试
Jun 25 Python
Python实现的一个自动售饮料程序代码分享
Aug 25 Python
在Python中使用cookielib和urllib2配合PyQuery抓取网页信息
Apr 25 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 Python
Python列表删除的三种方法代码分享
Oct 31 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
python保存文件方法小结
Jul 27 Python
Django之PopUp的具体实现方法
Aug 31 Python
python生成器推导式用法简单示例
Oct 08 Python
Java文件与类动手动脑实例详解
Nov 10 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
如何基于windows实现python定时爬虫
May 01 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缓存技术介绍
2006/11/25 PHP
php获取参数的几种方法总结
2014/02/18 PHP
php防止用户重复提交表单
2015/11/02 PHP
php curl模拟post请求和提交多维数组的示例代码
2015/11/19 PHP
PHP中静态变量的使用方法实例分析
2016/12/01 PHP
Gird事件机制初级读本
2007/03/10 Javascript
Mootools 1.2教程 事件处理
2009/09/15 Javascript
JS验证控制输入中英文字节长度(input、textarea等)具体实例
2013/06/21 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
jQuery无缝轮播图代码
2016/12/22 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
Layui组件Table绑定行点击事件和获取行数据的方法
2018/08/19 Javascript
在element-ui的select下拉框加上滚动加载
2019/04/18 Javascript
vue style width a href动态拼接问题的解决
2020/08/07 Javascript
[51:10]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python ElementTree 基本读操作示例
2009/04/09 Python
python线程锁(thread)学习示例
2013/12/04 Python
使用Python构建Hopfield网络的教程
2015/04/14 Python
python之Character string(实例讲解)
2017/09/25 Python
小白如何入门Python? 制作一个网站为例
2018/03/06 Python
python 2.7.14安装图文教程
2018/04/08 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
python re库的正则表达式入门学习教程
2019/03/08 Python
详解解决Python memory error的问题(四种解决方案)
2019/08/08 Python
python求加权平均值的实例(附纯python写法)
2019/08/22 Python
使用python实现名片管理系统
2020/06/18 Python
用HTML5的canvas实现一个炫酷时钟效果
2016/05/20 HTML / CSS
任意存:BOXFUL
2018/05/21 全球购物
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
幼儿园老师工作总结2015
2015/05/22 职场文书
解决Navicat for Mysql连接报错1251的问题(连接失败)
2021/05/27 MySQL
springboot读取resources下文件的方式详解
2022/06/21 Java/Android