重定向sys.stdout时numpy savetxt乱序

时间:2014-04-13 10:21:16

标签: python python-3.x file-io numpy stdout

我想使用numpy.savetxt编写一个numpy数组,可以选择写入stdout,也可以作为文件的一部分(通过重定向stdout)。例如(在Python3中)

import numpy as np
import sys

def output( a ):
    print( 'before np.savetxt' )
    np.savetxt( sys.stdout.buffer, a  )
    print( 'after np.savetxt' )

a = np.array( [ ( 1, 2, 3 ), ( 4, 5, 6 ) ] )

output( a )

with open( 'test', 'w' ) as file_out:
    sys.stdout = file_out
    output( a )

这写(到stdout):

before np.savetxt
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
after np.savetxt

但是'test'文件包含这些无序的条目:

> cat test
1.000000000000000000e+00 2.000000000000000000e+00 3.000000000000000000e+00
4.000000000000000000e+00 5.000000000000000000e+00 6.000000000000000000e+00
before np.savetxt
after np.savetxt

是否可以按顺序排列这些输出,还是应该使用不同的方法将numpy.savetxt与其他命令组合以写入同一文件?

1 个答案:

答案 0 :(得分:2)

您可以在output()函数内部仅使用savetxt命令,并传递headerfooter个参数:

def output( a ):
    header = 'before np.savetxt'
    footer = 'after np.savetxt'
    np.savetxt(sys.stdout.buffer, a, header=header, footer=footer)

@DavidParks提醒,对于Python 2.7,它应该是sys.stdout,对于Python 3.x,它应该是sys.stdout.buffer