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 异常处理实例详解
Mar 12 Python
Python标准库os.path包、glob包使用实例
Nov 25 Python
简单讲解Python中的闭包
Aug 11 Python
Python中__init__.py文件的作用详解
Sep 18 Python
python 输出所有大小写字母的方法
Jan 02 Python
浅谈Python 多进程默认不能共享全局变量的问题
Jan 11 Python
解决pycharm的Python console不能调试当前程序的问题
Jan 20 Python
浅谈pyqt5在QMainWindow中布局的问题
Jun 21 Python
Django框架安装方法图文详解
Nov 04 Python
解决Django响应JsonResponse返回json格式数据报错问题
Aug 09 Python
Python实现自动签到脚本的示例代码
Aug 19 Python
Python控制台输出俄罗斯方块移动和旋转功能
Apr 18 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 GD库生成图像的几个函数总结
2014/11/19 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
2019/02/25 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
Underscore源码分析
2015/12/30 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
JS实现鼠标滑过显示边框的菜单效果
2016/09/21 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
js实现适配不同的屏幕大小
2017/04/10 Javascript
详解JSONObject和JSONArray区别及基本用法
2017/10/25 Javascript
vue-resource拦截器设置头信息的实例
2017/10/27 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
express如何解决ajax跨域访问session失效问题详解
2019/06/20 Javascript
JS扁平化输出数组的2种方法解析
2019/09/17 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python中用altzone()方法处理时区的教程
2015/05/22 Python
python发送HTTP请求的方法小结
2015/07/08 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
mac系统安装Python3初体验
2018/01/02 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
python导入不同目录下的自定义模块过程解析
2019/11/18 Python
css3制作动态进度条以及附加jQuery百分比数字显示
2012/12/13 HTML / CSS
澳大利亚领先的内衣店:Bendon Lingerie澳大利亚
2020/05/15 全球购物
linux面试题参考答案(8)
2016/04/19 面试题
学生党员思想汇报
2013/12/28 职场文书
高中生期末评语大全
2014/01/28 职场文书
小学生环保倡议书
2014/05/15 职场文书
2014教育局对照检查材料思想汇报
2014/09/23 职场文书
给领导敬酒词
2015/08/12 职场文书
高三生物教学反思
2016/02/22 职场文书
Vue实现导入Excel功能步骤详解
2021/07/03 Vue.js
面试中canvas绘制图片模糊图片问题处理
2022/03/13 Javascript