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 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python使用matplotlib实现绘制自定义图形功能示例
Jan 18 Python
python放大图片和画方格实现算法
Mar 30 Python
Python自然语言处理 NLTK 库用法入门教程【经典】
Jun 26 Python
Pycharm运行加载文本出现错误的解决方法
Jun 27 Python
python实现画循环圆
Nov 23 Python
Python解释器以及PyCharm的安装教程图文详解
Feb 26 Python
40行Python代码实现天气预报和每日鸡汤推送功能
Feb 27 Python
python实现按键精灵找色点击功能教程,使用pywin32和Pillow库
Jun 04 Python
Python‘==‘ 及 ‘is‘相关原理解析
Sep 05 Python
Python中的None与 NULL(即空字符)的区别详解
Sep 24 Python
python识别围棋定位棋盘位置
Jul 26 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生成带有雪花背景的验证码
2008/09/28 PHP
PHP时间格式控制符对照表分享
2013/07/23 PHP
Laravel路由设定和子路由设定实例分析
2016/03/30 PHP
Jquery在IE7下无法使用 $.ajax解决方法
2009/11/11 Javascript
jquery分页对象使用示例
2014/04/01 Javascript
js拼接html注意问题示例探讨
2014/07/14 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
详解JavaScript的Polymer框架中的通知交互
2015/07/29 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
js实现扫雷小程序的示例代码
2017/09/27 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
2018/07/25 Javascript
浅谈react性能优化的方法
2018/09/05 Javascript
微信小程序新手教程之启动页的重要性
2019/03/03 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
python中正则表达式的使用详解
2014/10/17 Python
python获取list下标及其值的简单方法
2016/09/12 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
python+gdal+遥感图像拼接(mosaic)的实例
2020/03/10 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
详解matplotlib绘图样式(style)初探
2021/02/03 Python
pytorch __init__、forward与__call__的用法小结
2021/02/27 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
uniapp+Html5端实现PC端适配
2020/07/15 HTML / CSS
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
奶茶店创业计划书
2014/08/14 职场文书
2014年青年教师工作总结
2014/12/17 职场文书
2015年度物流工作总结
2015/04/30 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
Python实现Excel文件的合并(以新冠疫情数据为例)
2022/03/20 Python