如何在输出中为数据创建列?

时间:2019-01-05 16:01:52

标签: python

 def onNewData(self, data):
    zvalues = []
    f = open("rawdata.txt","w+")
    for i in range(data.getNumPoints()):
        zvalues.append(data.getZ(i))
        f.write((str(data.getX(i))+',')+(str(data.getY(i))+',') + (str(data.getZ(i))+',')+(str(data.getNoise(i))+',')+(str(data.getGrayValue(i))+',') + (str(data.getDepthConfidence(i))+','))
        if (i+1)%224==0:    
            f.write('\n') 
    f.close()  

对于这组代码,文本文档输出显示所有乱码而没有任何格式。如何使数字分别以列格式归入每个类别?例如,我有一个标头x,y,z,grayvalue,Noise,DepthConfidence,这些数字将相应地落入每个类别下。

Output of the text document

1 个答案:

答案 0 :(得分:0)

这是一种简单的算法,可将数据打印到左对齐的列中。首先,将其字符串表示形式的所有数据放入一个数组中。数组的每一行将是打印数据的一行,每一列将是打印的列。然后,对于每一列,查找并存储该列中数据项的最大长度。然后循环遍历数组的行。对于该行中的每一行和每一列,打印或写入数据项并添加足够的空间,以使该数据项占用与该列中最大数据项相同的空间。请记住在每行末尾打印/写一个行尾。

您仍然需要做出一些决定,例如是将分隔符逗号放在填充空格之前还是之后。但是这里有一些可能的代码。

# Get the data in string format into an array
toprint = []
for i in range(data.getNumPoints()):
    toprint.append([str(data.getX(i)),
                    str(data.getY(i)),
                    str(data.getZ(i)),
                    str(data.getNoise(i)),
                    str(data.getGrayValue(i)),
                    str(data.getDepthConfidence(i)),
    ])

# Get the maximum size data for each column
numrows = len(toprint)
numcols = len(toprint[0])
maxwidths = [max(len(toprint[rownum][colnum]) 
             for rownum in range(numrows))
             for colnum in range(numcols)]

# Print the data left-justified
for row in toprint:
    printrow = ', '.join(s.ljust(maxwidths[colnum]) for s in row)
    print(printrow, file=f)

您没有提供足够的文本格式数据供我测试该代码。