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中使用HTMLParser解析html实例
Feb 08 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 Python
利用python解决mysql视图导入导出依赖的问题
Dec 17 Python
python和opencv实现抠图
Jul 18 Python
python3 http提交json参数并获取返回值的方法
Dec 19 Python
Python实现的远程文件自动打包并下载功能示例
Jul 12 Python
python中open函数的基本用法示例
Sep 07 Python
django框架单表操作之增删改实例分析
Dec 16 Python
Pyecharts地图显示不完成问题解决方案
May 11 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
Jun 12 Python
pytorch使用horovod多gpu训练的实现
Sep 09 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 函数执行效率的小比较
2010/10/17 PHP
详解Yii2 之 生成 URL 的方法
2017/06/16 PHP
写了一个layout,拖动条连贯,内容区可为iframe
2007/08/19 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
JavaScript初学者建议:不要去管浏览器兼容
2014/02/04 Javascript
使用原生js封装webapp滑动效果(惯性滑动、滑动回弹)
2014/05/06 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
Vue实现动态响应数据变化
2017/04/28 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
vue.js与后台数据交互的实例讲解
2018/08/08 Javascript
vue 指令之气泡提示效果的实现代码
2018/10/18 Javascript
如何使用puppet替换文件中的string
2018/12/06 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
微信小程序中使用 async/await的方法实例分析
2020/05/06 Javascript
vue-router为激活的路由设置样式操作
2020/07/18 Javascript
Python NumPy库安装使用笔记
2015/05/18 Python
Python设计模式编程中解释器模式的简单程序示例分享
2016/03/02 Python
python中将一个全部为int的list 转化为str的list方法
2018/04/09 Python
Django 路由控制的实现代码
2018/11/08 Python
对python中UDP,socket的使用详解
2019/08/22 Python
Python容器使用的5个技巧和2个误区总结
2019/09/26 Python
pytorch中的transforms模块实例详解
2019/12/31 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
python中的socket实现ftp客户端和服务器收发文件及md5加密文件
2020/04/01 Python
python中time、datetime模块的使用
2020/12/14 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
学生会干部自荐信
2014/02/04 职场文书
党建工作经验交流材料
2014/05/25 职场文书
优秀党员学习焦裕禄精神思想汇报范文
2014/09/10 职场文书
商铺租房协议书范本
2014/12/04 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
详解Android中的TimePickerView(时间选择器)的用法
2022/04/30 Java/Android
MYSQL常用函数介绍
2022/05/05 MySQL
正则表达式基础与常用验证表达式
2022/06/16 Javascript