使用Python库的tabulate模块将对象属性的属性名和属性值以表格的形式打印
之前一次理论仿真用的是MATLAB,对于类和对象其实没有那么在意过。在经受MATLAB的卡顿闪退的折磨过后,决定新的一次仿真使用Python重新搭建环境。
第一部分涉及到Python的面对对象的代码,类的编写如下,类中的细节就不写出来了,属性已标出。
class Task(object):def __init__(self,dataSize,priority,value,frequencyLocal,timeLocal,energyLocal,frequencyMEC,timeMEC,energyMEC,timeTransmit,energyTransmit,ifOffload):
因为没有MATLAB的表格功能的加持,如果我想查看对象的具体属性值的话,Python常规输出操作只能把数据挤在一起输出,对象多了很容易让人崩溃,所以搜索了一下可以打印表格的模块,找到了tabulate。
使用该模块需要导入或者直接导入tabulate函数
import tabulate#或者from tabulate import tabulate
tabulate函数的基本使用语法如下:
tabulate.tabulate(tabular_data, headers=(), tablefmt=u'simple')
tabular_data:需要打印在表格中的数据。
headers:表头
tablefmt:显示格式,其中显示格式有很多中,具体可参考这位大佬的博客
Python对齐显示||tabulate函数||wcwidth模块||知道这些就够了:
为了获取对象的属性名和属性值,我编写了如下代码:
task = Task(0,0,0,0,0,0,0,0,0,0,0,0)Dict = task.__dict__KEY = list(Dict.keys())VALUE = list(Dict.values())print(tabulate(VALUE,headers=KEY,tablefmt='pipe'))
使用__dict__将对象属性以字典的形式输出,然后分别将key和value赋值给两个列表,最后调用tabulate函数。但是VS Code报错了。
TypeError: 'int' object is not iterable
因为我的对象属性均为int型变量,所以试着改为字符串型,然后将装载属性值的列表VALUE作为一个元素装入另一个列表showdata,因为tabulate函数以逗号判断打印行数,如果直接输出VALUE,会以一列打印:
| dataSize ||:-----------|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|| 0|
最后修改代码如下:
task = Task(0,0,0,0,0,0,0,0,0,0,0,0)Dict = task.__dict__KEY = list(Dict.keys())VALUE = list(Dict.values())VALUE = [str(x) for x in VALUE]showdata = []showdata.append(VALUE)print(tabulate(showdata,headers=KEY,tablefmt='pipe',disable_numparse=True))
打印效果如下:
| dataSize | priority | value | frequencyLocal | timeLocal | energyLocal | frequencyMEC | timeMEC | energyMEC | timeTransmit | energyTransmit | ifOffload ||:-----------|:-----------|:--------|:-----------------|:------------|:--------------|:---------------|:----------|:------------|:---------------|:-----------------|:------------|| 0| 0| 0 | 0| 0 | 0 | 0 | 0 | 0 | 0 | 0| 0 |
经过验证,将整形转为浮点型一样OK。
| dataSize | priority | value | frequencyLocal | timeLocal | energyLocal | frequencyMEC | timeMEC | energyMEC | timeTransmit | energyTransmit | ifOffload ||:-----------|:-----------|:--------|:-----------------|:------------|:--------------|:---------------|:----------|:------------|:---------------|:-----------------|:------------|| 0.0 | 0.0 | 0.0| 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 |