簡體   English   中英

如何使用 Python 代碼以表格格式打印多個 txt 文件的 output?

[英]How to print output of multiple txt file in tabular format with Python code?

我試圖通過單次運行使我的數據集最好地適應 700 多個 txt 文件。 我想從所有文件中獲取的 output 參數轉換為表格格式。我已經嘗試過這種方式

def resid(params, x, ydata):
   decay = params['decay'].value
   phase = params['phase'].value
   omega = params['omega'].value
   amp = params['amp'].value
   ampb=params['ampb'].value
   phaseb=params['phaseb'].value
   #omegab = params['omegab'].value
   
   y_model =  (amp * np.sin(x*2*np.pi*omega+phase)+ ampb*np.sin(x*4*np.pi*omega+phaseb)) * np.exp(-x*decay)
   return y_model - ydata


filelist = glob.glob("C:/Users/USER/Desktop/B3/*.txt") 
#print(filelist)
for file in filelist:
   data = np.loadtxt(file)
   x = data[:,0]
   y = data[:,1]
   params = lmfit.Parameters()
   params.add('phase', 0.0,   min=-np.pi, max=np.pi)
   params.add('omega',  10,   min=7, max=12)
   params.add('amp',     7,   min=0, max=10.0)
   params.add('decay', 0.05,  min=0, max=10.0)
   params.add('ampb',     3,  min=0, max=8.0)
   params.add('phaseb', 0.0,  min=-np.pi, max=np.pi)
   #params.add('omegab', 18, min=16, max=20)   
   
   fit = lmfit.minimize(resid, params, args=(x, y), method='differential_evolution')
   #print("\n\n# Fit using differential_evolution:")
   #print(lmfit.report_fit(fit))
   for name, param in fit.params.items():
           if name=='phase':
               print('phase',' ' , param.value,' ',param.stderr, ) 
           elif name=='amp ':
               print('amp', '   ',param.value,'  ',param.stderr )
           elif name=='omega':
               print('omega', '  ',param.value,'  ',param.stderr)
           elif name=='decay':
               print('decay', '  ',param.value,'  ',param.stderr)
           elif name=='ampb':
               print('ampb', '   ',param.value,'  ',param.stderr)
           else: 
               print('phaseb','  ',param.value,'  ',param.stderr)
   print(fit.success)

我希望這種格式的 output 在此處輸入圖像描述

但我已經分別獲得了每個 output 的值enter image description here

您可以在內部for循環之前創建一個空dict ,讓循環用參數填充該dict ,然后在for循環完成后將它們全部打印在 1 行上。 下面的示例將打印彼此相鄰的值,並用 TAB 字符分隔,這應該足夠可讀,但“表格”可能不會完全對齊。 如果你想讓它在終端中看起來更好, 這里有一些解決方案。 或者,您可以將制表符或逗號分隔的值轉儲到文件中,然后打開該文件,例如使用 Excel。

    ...
    params = {}
    for name, param in fit.params.items():
        if name == 'phase':
            params['phase'] = param.value
            params['phase_stderr'] = param.stderr
        elif name == 'amp':
            params['amp'] = param.value
            params['amp_stderr'] = param.stderr
        elif name == 'omega':
            params['omega'] = param.value
            params['omega_stderr'] = param.stderr
        elif name == 'decay':
            params['decay'] = param.value
            params['decay_stderr'] = param.stderr
        elif name == 'ampb':
            params['ampb'] = param.value
            params['ampb_stderr'] = param.stderr
        else: 
            params['phaseb'] = param.value
            params['phaseb_stderr'] = param.stderr
    print(
        params['phase'],
        params['amp'],
        params['omega'],
        params['decay'],
        params['ampb'],
        params['phaseb'],
        params['phase_stderr'],
        params['amp_stderr'],
        params['omega_stderr'],
        params['decay_stderr'],
        params['ampb_stderr'],
        params['phaseb_stderr'],
        sep="\t"
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM