【仿真日志 1 】tabulate模块以表格形式打印对象属性【Python】

使用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         |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值