将输出文件数值减少到两位小数
我有下面这个代码,它会把所有的数值提取出来,然后输出到另一个文件里。
with open('candidatevalues2.txt', 'w') as outfile:
outfile.write('plate mjd fiberid FWHM erFWHM loglum loglumerr logBHmass logBhmasserr ksvalue pvalue\n')
for i in range(9):
with open('candidatevalues2.txt', 'a') as outfile:
dmpval= stats.ks_2samp(y_real[i], yfit[i])
outfile.write('{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}\n'.format(plate[i], mjd[i], fiberid[i], fwhm[i], fwhmer[i], loglum[i], loglumerr[i], logbhmass[i], logbhmasserr[i], dmpval[0], dmpval[1]))
文件的前几行显示如下:
plate mjd fiberid FWHM erFWHM loglum loglumerr logBHmass logBhmasserr ksvalue pvalue
590 52057 465 1710.58526651 115.154250367 42.0681732777 0.070137615974 6.81880343617 0.15451686304 0.0909090909091 0.970239478143
1793 53883 490 1736.15809558 144.074772803 40.160433977 0.0736271164581 5.7828225787 0.13016470738 0.0909090909091 0.970239478143
648 52559 335 1530.9128304 153.965617385 40.8584948115 0.110687643929 6.05420009544 0.155678567881 0.0909090909091 0.970239478143
我想知道怎么把所有的数值都减少到只有两位小数呢?
1 个回答
1
我知道,学习在Python中使用.format方法需要一些时间,因为它的使用说明有点隐晦。
关于使用Python字符串的format
方法的简短课程
这里有几个代码修改的例子:
原始代码:
outfile.write('{0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10}\n'.format(plate[i], mjd[i], fiberid[i], fwhm[i], fwhmer[i], loglum[i], loglumerr[i], logbhmass[i], logbhmasserr[i], dmpval[0], dmpval[1]))
为了让解释更简单和简短,我们可以简化一下:
outfile.write('{0} {1} {2}\n'.format(plate[i], dmpval[0], dmpval[1]))
分开格式模板和渲染过程:
templ = '{0} {1} {2}\n'
outfile.write(templ.format(plate[i], dmpval[0], dmpval[1]))
指定保留两位小数的格式:
templ = '{0:.2f} {1:.2f} {2:.2f}\n'
outfile.write(templ.format(plate[i], dmpval[0], dmpval[1]))
现在你应该得到了你想要的结果。
使用templ.format(**locals())
的技巧
如果你想直接通过名字渲染变量的内容,或者通过名字和属性(使用点表示法),或者通过名字和常量的正索引,你可以直接在模板中使用它们,并且可以用一个小技巧:locals()会返回一个字典,里面包含了当前可用的变量,而**locals()
可以让它们在调用时作为关键字变量使用:
plate_i = plate[i]
templ = '{plate_i:.2f} {dmpval[0]:.2f} {dmpval[1]:.2f}\n'
outfile.write(templ.format(**locals()))
不过,你会发现,这种方法不适用于通过另一个变量指定的索引,这就是为什么我需要引入一个新的变量plate_i
。