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登录好友QQ空间点赞的示例代码
Nov 04 Python
python3使用smtplib实现发送邮件功能
May 22 Python
Python3爬虫之自动查询天气并实现语音播报
Feb 21 Python
Python虚拟环境的原理及使用详解
Jul 02 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
python实现发送form-data数据的方法详解
Sep 27 Python
python实现替换word中的关键文字(使用通配符)
Feb 13 Python
解决django FileFIELD的编码问题
Mar 30 Python
python/golang 删除链表中的元素
Sep 14 Python
python3 sqlite3限制条件查询的操作
Apr 07 Python
python缺失值的解决方法总结
Jun 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防止sql注入代码实例
2013/12/18 PHP
PHP下获取上个月、下个月、本月的日期(strtotime,date)
2014/02/02 PHP
浅谈discuz密码加密的方式
2014/05/22 PHP
基于jquery的loading效果实现代码
2010/11/05 Javascript
浅析Js(Jquery)中,字符串与JSON格式互相转换的示例(直接运行实例)
2013/07/09 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
jQuery中dequeue()方法用法实例
2014/12/29 Javascript
angularjs在ng-repeat中使用ng-model遇到的问题
2016/01/21 Javascript
Angular 通过注入 $location 获取与修改当前页面URL的实例
2017/05/31 Javascript
利用node.js制作命令行工具方法教程(一)
2017/06/22 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
2017/06/25 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
Vue CLI3中使用compass normalize的方法
2019/05/30 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
vue 源码解析之虚拟Dom-render
2019/08/26 Javascript
python获取各操作系统硬件信息的方法
2015/06/03 Python
Python利用flask sqlalchemy实现分页效果
2020/08/02 Python
Python处理中文标点符号大集合
2018/05/14 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
python实现自动化上线脚本的示例
2019/07/01 Python
python模块常用用法实例详解
2019/10/17 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
python实现名片管理器的示例代码
2019/12/17 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
django中ImageField的使用详解
2020/12/21 Python
CSS3实现淘宝留白的方法
2020/06/05 HTML / CSS
关于前端上传文件全面基础扫盲贴(入门)
2019/08/01 HTML / CSS
小班幼儿评语大全
2014/04/30 职场文书
秋天的图画教学反思
2014/05/01 职场文书
应届大专生求职信
2014/06/26 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
暑假生活随笔
2015/08/15 职场文书
MySQL中连接查询和子查询的问题
2021/09/04 MySQL
html原生table实现合并单元格以及合并表头的示例代码
2023/05/07 HTML / CSS