美文网首页
python 格式化输出

python 格式化输出

作者: 牛奶大泡芙 | 来源:发表于2020-11-18 17:20 被阅读0次

    今天遇到了一个场景:查看一组二维的中间数据,print之后比较乱,如下图所示


    原始打印效果.png

    这是严格的10×25的数组,其中有一些英文空格,占位不足,所以打算用一个函数去优化他,这里考虑三种情况:
    (1)如果数据类型不是List而是Tensor或者Numpy
    (2)如果第一维度的list长度不一致
    (3)如果输入数据的0,1维度倒置,也就是下面这种情况


    数据结构.png
    这里用prettytable包来实现了,不得不说确实是比较美观,和一开始的效果差距还是比较大,终端输出如下:
    prettytable效果.png

    具体的代码如下,调用row_table、column_table就可以看到打印效果,column_table会将0,1维度调换:

    import prettytable as pt
    import numpy as np
    import torch
    
    def row_table(d):
        data = pre_type(d)
        tb = pt.PrettyTable()
        row_len = len(data[0])
        row_num = len(data)
        print(row_len,row_num)
        tb.field_names = list(map(lambda x:str(x), range(0, row_len+1)))
        for i in range(0,row_num):
            row = data[i]
            row.insert(0,str(i))
            tb.add_row(row)
        print(tb)
    
    def column_table(d):
        # 如果1维度是按列(备选组)的,那就转化成按行(一个句子)的,然后再打印
        # 毕竟只是展示,还是打印成一行看着清楚
        # 所有预处理之前都用pre_type先转成二维list的形式,不接受Ternsor,Numpy类型
        data = pre_type(d)
        data = pre_size(data)
        row_table(data)
    
    def pre_size(d):
        data = np.array(d)
        data.transpose()
        return data.tolist()
    
    def pre_type(d):
        data = None
        if isinstance(d,list):
            data = d
        elif type(d) is np.ndarray:
            data = data.tolist()
        elif torch.is_tensor(d):
            data = data.numpy().tolist()
        max_len = max(list(map(lambda x:len(x), data)))
        data=list(map(lambda l:l+[' ']*(max_len-len(l)), data))
        print(data)
        return data
    

    相关文章

      网友评论

          本文标题:python 格式化输出

          本文链接:https://www.haomeiwen.com/subject/jlwciktx.html