float()的文字无效:0.000001,如何修复错误?

时间:2012-03-28 23:49:22

标签: python csv floating-point literals

我有一个包含3列数据的.csv文件。我需要创建一个新的输出文件,其中包含原始文件中第一列和第三列的特定数据集。第三列包含十进制值,我相信在这种情况下我使用了python的float()功能。我尝试了以下代码:

in_file = open("filename.csv", "r")

out_file = open("output.csv", "w")

while True:

    line = in_file.readline()
    if (line == ''): 
        break
    line = line.strip() 
    items = line.split(',') 
    gi_name = items[0] 
    if (gi_name.startswith("_"))
        continue
    p_value = float(items[2]) 
    if (p_value > 0.05):
        continue
    out_file.write(','.join([gene_name, str(p_value)]))
in_file.close()
out_file.close()

当我运行上述内容时,我收到以下错误:

错误:float()的文字无效:0.000001

值0.0000001是我的第三列数据集中的第一个值,我想代码无法读取超出该集合但我不确定原因。我是python的新手,并不真正理解为什么我收到此错误或如何解决它。我已经尝试了如何输入float()的其他修改,但没有成功。有谁知道我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:5)

根据您发布的内容,我们目前尚不清楚您尝试传递给float()的字符串是否存在微妙错误(因为看起来非常合理)。尝试添加调试打印语句:

print(repr(items[2]))
p_value = float(items[2])

然后,您可以确定完全传递给float()的内容。对repr()的调用将使通常不可见的字符可见。将结果添加到您的问题中,我们将能够进一步发表评论。

答案 1 :(得分:1)

您的文件很可能有一些不可打印的字符被读取。试试这个:

>>> a = '0.00001\x00'
>>> a
'0.00001\x00'
>>> print(a)
0.00001
>>> float(a)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for float(): 0.00001

你可以看到a有一个NUL字符,不是用print打印的,也不是浮点数。