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文件操作类操作实例详解
Jul 11 Python
Python中使用Tkinter模块创建GUI程序实例
Jan 14 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
Dec 12 Python
Django组件之cookie与session的使用方法
Jan 10 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
对Python 获取类的成员变量及临时变量的方法详解
Jan 22 Python
python计算二维矩形IOU实例
Jan 18 Python
django 利用Q对象与F对象进行查询的实现
May 15 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
浅谈keras中的keras.utils.to_categorical用法
Jul 02 Python
Django使用echarts进行可视化展示的实践
Jun 10 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
PHP5中使用PDO连接数据库的方法
2010/08/01 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
window.print打印指定div实例代码
2013/12/13 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
如何使用headjs来管理和异步加载js
2016/11/29 Javascript
详谈JavaScript的闭包及应用
2017/01/17 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
使用JS代码实现俄罗斯方块游戏
2018/08/03 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
2019/09/03 jQuery
python爬取NUS-WIDE数据库图片
2016/10/05 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
python数据挖掘需要学的内容
2019/06/23 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
2019/07/03 Python
django使用xadmin的全局配置详解
2019/11/15 Python
英国舒适型鞋履品牌:FitFlop
2017/05/17 全球购物
一套C#面试题
2013/10/09 面试题
大众服装店创业计划书范文
2014/01/01 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
关于元旦的广播稿
2014/02/16 职场文书
心理健康活动总结
2014/04/30 职场文书
庆祝儿童节标语
2014/10/09 职场文书
贫困证明书格式及范文
2014/10/15 职场文书
2014年个人售房协议书
2014/10/30 职场文书
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android
Windows和Linux上部署Golang并运行程序
2022/04/22 Servers
Python3使用Qt5来实现简易的五子棋小游戏
2022/05/02 Python
PHP 时间处理类Carbon
2022/05/20 PHP