写格式化文件

时间:2011-09-27 21:11:24

标签: python

我想将np.double写入格式化文件:

import numpy as np
a='12 45 87 34 65';
s=np.double(a.split())
fid=open('qqq.txt','wt')
fid.write('%5.1f %5.1f %5.1f %5.1f %5.1f ' %(s[0],s[1],s[2],s[3],s[4]))
fid.close()

这个“写”行可以用更短的方式写出来吗?

fid.write('%5.1f %5.1f %5.1f %5.1f %5.1f ' %(s[0],s[1],s[2],s[3],s[4]))

6 个答案:

答案 0 :(得分:6)

一种方法是

In [48]: ''.join('%5.1f ' % n for n in s)
Out[48]: ' 12.0  45.0  87.0  34.0  65.0 '

另一种方式是

In [49]: ('%5.1f ' * len(s)) % tuple(s)
Out[49]: ' 12.0  45.0  87.0  34.0  65.0 '

答案 1 :(得分:1)

fid.write(''.join(map('{:5.1f} '.format, s)))

答案 2 :(得分:0)

这是最快的方式:

fid.write(''.join(map(lambda x: '%5.1f'%x , s.tolist())))

值得注意的是,通过这样做可以更快地实现读取值的方法:

>>> import numpy as np
>>> a = '12 45 87 34 65'
>>> np.fromstring(a, sep=' ')
array([ 12.,  45.,  87.,  34.,  65.])

答案 3 :(得分:0)

如何使用列表推导首先将双精度转换为字符串,然后创建输出行。

例如:

double_strs = ["%5.1f" % number for number in s]
fid.write( " ".join(double_strs) )

答案 4 :(得分:0)

快速简单,我的朋友:

fid.write('%5.1f ' * len(s) % tuple(s))

答案 5 :(得分:0)

我能想到的最短的是:

    "%5.1f"*len(s)%s