在python中写入csv时限制小数位数

时间:2016-06-01 12:45:38

标签: python arrays csv numpy decimal

我循环遍历文件,对于每个文件,我计算了一个包含4000多个(固定数字)功能的列表。这些功能由函数计算并返回为numpy.array

我想写一个CSV文件,每个文件有一行(每行一个numpy.array,包含4000多个元素)。

我目前正在使用Python的csv库,即使我的数组已舍入(感谢np.around),CSV文件也包含大量数字的数字,例如0,302499999999999代替0,3025

我知道这可能来自Python中的floating points limitations,但我想知道是否有任何方法可以避免这种情况(通过将其写成字符串?)在输出文件中。

以下代码示例重现问题:

import numpy as np
import csv

for i in range(10) :
    row = np.around(np.random.random(4000), decimals=5)

    with open('output.csv', "ab") as fp:
        wr = csv.writer(fp, dialect='excel')
        wr.writerow(row)

1 个答案:

答案 0 :(得分:3)

您可以像这样使用numpy.savetxt()

import numpy as np

with open('output.csv', 'w') as fh:
    for i in range(10):  # loop over features
        row = np.random.random(4000)
        np.savetxt(fh, row.reshape(1, -1), fmt='%.5e', delimiter=',')