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 Web开发模板引擎优缺点总结
May 06 Python
使用Python的Supervisor进行进程监控以及自动启动
May 29 Python
python 默认参数问题的陷阱
Feb 29 Python
浅谈Django REST Framework限速
Dec 12 Python
Python3计算三角形的面积代码
Dec 18 Python
Python 记录日志的灵活性和可配置性介绍
Feb 27 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
python实现石头剪刀布小游戏
Jan 20 Python
Django Channels 实现点对点实时聊天和消息推送功能
Jul 17 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
keras绘制acc和loss曲线图实例
Jun 15 Python
Python爬虫之Selenium实现键盘事件
Dec 04 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
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
2011/12/01 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
Yii2.0中的COOKIE和SESSION用法
2016/08/12 PHP
你不知道的文件上传漏洞php代码分析
2016/09/29 PHP
PHP中list方法用法示例
2016/12/01 PHP
php 微信开发获取用户信息如何实现
2016/12/13 PHP
修改file按钮的默认样式实现代码
2013/04/23 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
js oncontextmenu事件使用详解
2017/03/25 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
2019/03/29 Javascript
javascript触发模拟鼠标点击事件
2019/06/26 Javascript
vue el-table实现行内编辑功能
2019/12/11 Javascript
Python交换变量
2008/09/06 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
python对excel文档去重及求和的实例
2018/04/18 Python
浅谈Pycharm最有必要改的几个默认设置项
2020/02/14 Python
基于Python fminunc 的替代方法
2020/02/29 Python
Django model重写save方法及update踩坑详解
2020/07/27 Python
关于 HTML5 的七个传说小结
2012/04/12 HTML / CSS
荷兰鞋子在线:Nelson Schoenen
2017/12/25 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
印度在线购物网站:Paytmmall
2019/07/24 全球购物
什么样的创业计划书可行性高?
2014/02/01 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
教育学习自我评价
2014/02/03 职场文书
致标枪运动员广播稿
2014/02/06 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
全国税务系统先进集体事迹材料
2014/05/19 职场文书
幼师求职信
2014/06/23 职场文书
法院授权委托书范文
2014/08/02 职场文书
户外活动总结
2015/02/04 职场文书
面试复试通知单
2015/04/24 职场文书
三年级作文之小小梦想
2019/12/06 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL