2016-03-08 45 views
0
f = open('freq.txt', 'w') 

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

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

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

编辑 是马丁尖把我得到的文件像这样

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

我只想数值。

+2

没有,结果是240串。你从来没有将这些字符串转换为浮点数。 –

+0

你想达到什么目的?目前,你正在为你的文件写一个_'stringified'_列表,这可能不是你想要的。 – ForceBru

+0

@MartijnPieters否,result.sort(key = float)。 – milenko

回答

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)) 
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() 
+0

工程,但我想每行一个。 – milenko

+0

所以,如果writelines没有给每行一个,那么试试这个:f.write('\ n'.join(formatted)) –

0

我认为result当前包含字符串列表,而不是浮动的列表。即使每个字符串只包含一个浮点数,您也必须向python表明您想将它们视为浮点数而不是字符串。 为此,您需要cast他们: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)) 
相关问题