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 Django模板的使用方法(图文)
Nov 04 Python
python练习程序批量修改文件名
Jan 16 Python
跟老齐学Python之传说中的函数编写条规
Oct 11 Python
python编程开发之日期操作实例分析
Nov 13 Python
Python实现统计代码行的方法分析
Jul 12 Python
python中Apriori算法实现讲解
Dec 10 Python
python3的print()函数的用法图文讲解
Jul 16 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
python实现逢七拍腿小游戏的思路详解
May 26 Python
tensorflow下的图片标准化函数per_image_standardization用法
Jun 30 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 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 date与gmdate的获取日期的区别
2010/02/08 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
2016/11/30 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
JS中的数组的sort方法使用示例
2014/01/22 Javascript
JavaScript获取网页支持表单字符集的方法
2015/04/02 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
Bootstrap Navbar Component实现响应式导航
2016/10/08 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
vue.js 图片上传并预览及图片更换功能的实现代码
2018/08/27 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
JavaScript Array.flat()函数用法解析
2020/09/02 Javascript
vue项目打包后提交到git上为什么没有dist这个文件的解决方法
2020/09/16 Javascript
Python的Flask框架与数据库连接的教程
2015/04/20 Python
基于python实现学生管理系统
2018/10/17 Python
python中如何使用insert函数
2020/01/09 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
canvas之自定义头像功能实现代码示例
2017/09/29 HTML / CSS
美国奢侈品在线团购网站:Gilt City
2017/11/16 全球购物
PUMA澳大利亚官方网站:德国运动品牌
2018/10/19 全球购物
营销与策划专业毕业生求职信
2013/11/01 职场文书
副处级干部考察材料
2014/05/17 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
公司授权委托书
2014/10/17 职场文书
毕业生评语大全
2015/01/04 职场文书
国庆节慰问信
2015/02/15 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
MySQL大小写敏感的注意事项
2021/05/24 MySQL
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
Python可变集合和不可变集合的构造方法大全
2021/12/06 Python