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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
python网络编程之读取网站根目录实例
Sep 30 Python
Python入门必须知道的11个知识点
Mar 21 Python
Python不同目录间进行模块调用的实现方法
Jan 29 Python
Python实现将HTML转成PDF的方法分析
May 04 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
Python操作SQLite数据库过程解析
Sep 02 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
Django对接支付宝实现支付宝充值金币功能示例
Dec 17 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
python程序输出无内容的解决方式
Apr 09 Python
OpenCV-Python实现人脸美白算法的实例
Jun 11 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
星际实力自我测试
2020/03/04 星际争霸
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
2011/11/21 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
php的命名空间与自动加载实现方法
2019/08/25 PHP
ThinkPHP5&5.1实现验证码的生成、使用及点击刷新功能示例
2020/02/07 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
PHP程序员简单的开展服务治理架构操作详解(三)
2020/05/14 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
js获取字符串最后一位方法汇总
2014/11/13 Javascript
无需 Flash 使用 jQuery 复制文字到剪贴板
2016/04/26 Javascript
javascript实现粘贴qq截图功能(clipboardData)
2016/05/29 Javascript
Bootstrap实现登录校验表单(带验证码)
2016/06/23 Javascript
JS调用某段SQL语句的方法
2016/10/20 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
一次让你了解全部JavaScript的作用域
2019/06/24 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
[59:00]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD BO3 第一场 3月7日
2021/03/11 DOTA
Python中的列表生成式与生成器学习教程
2016/03/13 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
回调函数的意义以及python实现实例
2017/06/20 Python
在mac下查找python包存放路径site-packages的实现方法
2018/11/06 Python
详解tensorflow2.x版本无法调用gpu的一种解决方法
2020/05/25 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
python3 re返回形式总结
2020/11/20 Python
毕业生个人求职信范文分享
2014/01/05 职场文书
关于运动会的稿件
2014/02/02 职场文书
检查接待方案
2014/02/27 职场文书
社团活动总结范文
2014/04/26 职场文书
廉政承诺书2015
2015/04/28 职场文书
2015年妇产科工作总结
2015/05/18 职场文书
员工手册董事长致辞
2015/07/29 职场文书
2015年国庆节演讲稿范文
2015/07/30 职场文书
2016年校园重阳节广播稿
2015/12/18 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python