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中的__init__()方法
May 02 Python
快速实现基于Python的微信聊天机器人示例代码
Mar 03 Python
python类的继承实例详解
Mar 30 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
Apr 17 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
解决python中 f.write写入中文出错的问题
Oct 31 Python
python 并发编程 非阻塞IO模型原理解析
Aug 20 Python
python中删除某个元素的方法解析
Nov 05 Python
Python tcp传输代码实例解析
Mar 18 Python
使用python实现时间序列白噪声检验方式
Jun 03 Python
sqlalchemy实现时间列自动更新教程
Sep 02 Python
Python中的协程(Coroutine)操作模块(greenlet、gevent)
May 30 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中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
模仿jQuery each函数的链式调用
2009/07/22 Javascript
从面试题学习Javascript 面向对象(创建对象)
2012/03/30 Javascript
很好用的js日历算法详细代码
2013/03/07 Javascript
鼠标滚轮改变图片大小的示例代码
2013/11/20 Javascript
DWR3 访问WEB元素的两种方法实例详解
2017/01/03 Javascript
javascript常用经典算法详解
2017/01/11 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
详解动画插件wow.js的使用方法
2017/09/13 Javascript
web前端vue filter 过滤器
2018/01/12 Javascript
Angular 数据请求的实现方法
2018/05/07 Javascript
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
vxe-table vue table 表格组件功能
2019/05/26 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
[01:29]Ti4循环赛第三日精彩回顾
2014/07/13 DOTA
[01:20]DOTA2 2017国际邀请赛冠军之路无止竞
2017/06/19 DOTA
python list使用示例 list中找连续的数字
2014/01/27 Python
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
Python进阶之递归函数的用法及其示例
2018/01/31 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
Python语言编写智力问答小游戏功能
2020/10/13 Python
如何通过python检查文件是否被占用
2020/12/18 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
餐饮加盟计划书
2014/01/10 职场文书
2015年维修工作总结
2015/04/25 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
Vue详细的入门笔记
2021/05/10 Vue.js
pytorch fine-tune 预训练的模型操作
2021/06/03 Python