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中的多重装饰器
Apr 11 Python
Python选课系统开发程序
Sep 02 Python
python中实现迭代器(iterator)的方法示例
Jan 19 Python
解决pycharm运行时interpreter为空的问题
Oct 29 Python
在python里从协程返回一个值的示例
Feb 19 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
Python 日期区间处理 (本周本月上周上月...)
Aug 08 Python
Pandas操作CSV文件的读写实现方法
Nov 13 Python
在python shell中运行python文件的实现
Dec 21 Python
Python openpyxl模块原理及用法解析
Jan 19 Python
python绘制高斯曲线
Feb 19 Python
利用Python读取微信朋友圈的多种方法总结
Aug 23 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
destoon实现首页显示供应、企业、资讯条数的方法
2014/07/15 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
php版微信公众平台实现预约提交后发送email的方法
2016/09/26 PHP
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
2010/12/30 Javascript
jquery实现点击查看更多内容控制段落文字展开折叠效果
2015/08/06 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
BootStrap中Table隐藏后显示问题的实现代码
2017/08/31 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
基于Vue的延迟加载插件vue-view-lazy
2018/05/21 Javascript
js实现多个倒计时并行 js拼团倒计时
2019/02/25 Javascript
js实现打字小游戏
2019/12/17 Javascript
python中的reduce内建函数使用方法指南
2014/08/31 Python
python绘制立方体的方法
2018/07/02 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
Python中面向对象你应该知道的一下知识
2019/07/10 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
Python爬虫工具requests-html使用解析
2020/04/29 Python
python爬虫破解字体加密案例详解
2021/03/02 Python
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
好的自荐信包括什么内容
2013/11/07 职场文书
项目副经理岗位职责
2013/12/30 职场文书
《长城和运河》教学反思
2014/04/14 职场文书
学校春季防火方案
2014/06/08 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
小学网上祭英烈活动总结
2014/07/05 职场文书
辞职信的写法
2015/02/27 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
2016年第29个世界无烟日宣传活动总结
2016/04/06 职场文书
警用民用对讲机找不同
2022/02/18 无线电
JavaScript实现酷炫的鼠标拖尾特效
2022/02/18 Javascript