2015-10-13 101 views
0

什麼是最好的方法來創建一個整潔的表格輸出,並將其以同樣的方式保存到文本文件?輸出的表格顯示

現在我正在使用下面的代碼顯示我的輸出到IPython控制檯,它提供瞭如圖(1)所示的輸出。

outputLine = ["NIST line CG100 CG050 FactoryCal HMFW (nm)-original  (SIGMA)   WCalFunctionDerivatives"] 
for n, line in enumerate(wlines, 1): 
    outputLine.append(" ".join(
     [str(item) for item in [wlines[n-1],peaks[n-1].cg100(), 
     peaks[n-1].cgArb(0.5), 
     wavelengthToPixel(wlines[n-1], 500, wavep), 
     peaks[n-1].getHMFW()/prismpy.wcalfunctionDerivative(results.x, wlines[n-1]), peaks[n-1].getHMFWPixels(), prismpy.wcalfunctionDerivative(results.x, wlines[n-1])]])) 

Figure(1)

從數學背景的人,我可以用什麼其他的方法來顯示一個整潔的表格格式此相同的輸出?提前致謝。

+1

如果你打算在這個數據的分析,你可能想看看'pandas',這將製表輸出,但其ST數據力量在分析中。 – AChampion

+0

@AChampion:對這些數據沒有進一步的分析。最終結果如圖所示。不過會檢查熊貓。你的意思是獨家DataFrame(熊貓)? –

+0

是的,DataFrame會保存數據並自動轉換爲字符串並在輸出上製表。但它可能只是格式化的矯枉過正。雖然另一個SO'er說「來格式化,留下來分析」,我在這裏迴應。 – AChampion

回答

1

如果您正在使用列表的列表的工作,下面的方法可能是有用的:

def col_display(data, file): 
    widths = [0] * len(data[0]) 
    for row in data: 
     widths[:] = [max(widths[index], len(str(col))) for index, col in enumerate(row)] 
    for row in data: 
     output = " ".join(["%-*s" % (widths[index], col) for index, col in enumerate(row)]) 
     print(output)  
     file.write(output + '\n') 

outputLine = ["NIST line", "CG100", "CG050", "FactoryCal", "HMFW (nm)-original", "(SIGMA)", "WCalFunctionDerivatives"] 
wlines = [[123.1234567890] * 7] * 4 
lines = [outputLine] + wlines 

with open('output.txt', 'w') as f_output: 
    col_display(lines, f_output) 

這將顯示以下內容,創建具有相同內容的文本文件:

NIST line  CG100   CG050   FactoryCal  HMFW (nm)-original (SIGMA)  WCalFunctionDerivatives 
123.123456789 123.123456789 123.123456789 123.123456789 123.123456789  123.123456789 123.123456789   
123.123456789 123.123456789 123.123456789 123.123456789 123.123456789  123.123456789 123.123456789   
123.123456789 123.123456789 123.123456789 123.123456789 123.123456789  123.123456789 123.123456789   
123.123456789 123.123456789 123.123456789 123.123456789 123.123456789  123.123456789 123.123456789