Python写入文件:TypeError:每行一个怎么样?

时间:2016-03-08 12:59:37

标签: python io

f = open('freq.txt', 'w')

def format(value):
    return "%.5f" % value

formatted = [format(float(v)) for v in result]
f.write(str(formatted))

我的代码出了什么问题? 结果是带有240个浮点数的列表,我想将它们写入每行一个文件。

EDIT 是的,正如马丁指出的那样,我得到了这样的文件

['56337.19531', '48429.55859', '44960.00000', '41631.85938', '35788.30469', '33180.00000',

我只想要数值。

3 个答案:

答案 0 :(得分:2)

该错误消息告诉您错误:value是一个字符串,而不是一个浮点数。你只需要转换它:

def format(value):
    return "%.5f" % float(value)

您可能不想将列表写入文件。您可能希望每个数字都在自己的行上。为此,您需要使用str.join()

f.write('\n'.join(formatted))

更好的是,使用os.linesep

import os
f.write(os.linesep.join(formatted))

答案 1 :(得分:0)

试试这个:

f = open('freq.txt', 'w')

def format(value):
    return "%.5f" % float(value)

formatted = [format(v) for v in result]
f.writelines(formatted)
f.close()

答案 2 :(得分:0)

我认为result目前包含字符串列表,而不是浮点列表。即使每个字符串只包含一个浮点数,你必须向python指出你想将它们视为浮点而不是字符串。 为此,您需要强制转换float(val)从strting'val'返回浮点值。 所以,你的代码应该是:

f = open('freq.txt', 'w')

def format(value):
    return "%.5f" % value

formatted = [format(float(v)) for v in result]
f.write(str(formatted))

或者,如果你想总是将给定的参数强制转换为函数,以避免进一步的错误:

f = open('freq.txt', 'w')

def format(value):
    return "%.5f" % float(value)

formatted = [format(v) for v in result]
f.write(str(formatted))
相关问题