【问题标题】:Trouble converting strings to float from inputfile从输入文件将字符串转换为浮点数时遇到问题
【发布时间】:2018-10-13 12:25:54
【问题描述】:

我正在尝试使用以下 python 代码将文件中的一些浮动值填充到元组中:

with open(filename, 'r') as file:

    i=0
    lines = file.readlines()            
    for line in lines:
        if (line != None) and (i != 0) and (i != 1):        #ignore first 2 lines
            splitted = line.split(";")

            s = splitted[3].replace(",",".")

            lp1.heating_list[i-2] = float(s)    
         i+=1   

这些值来自一个 .csv 文件,其中的行如下所示:

MFH;0:15;0,007687511;0,013816233;0,023092447;

问题是我明白了:

lp1.heating_list[i-2] = float(s)

ValueError: could not convert string to float: 

而且我不知道出了什么问题。请照亮我。

【问题讨论】:

  • 您可以发布您的文本示例吗?
  • 文本?我发布了代码和数据sn-p
  • 我指的是filename的内容
  • 最快的调试方法是在调用float(s)之前打印s,甚至打印splitted。您的文件中可能有不符合逻辑的违规行。
  • 哦,线条在那里。我可以从文件中打印它们。没关系

标签: python string types numbers double


【解决方案1】:
from io import StringIO

txt = """ligne1
ligne2
MFH;0:15;0,007687511;0,013816233;0,023092447;
MFH;0:15;0,007687511;0,013816233;0,023092447;
MFH;0:15;0,007687511;0,013816233;0,023092447;
MFH;0:15;0,007687511;0,013816233;0,023092447;
"""

lp1_heating = {}

with StringIO(txt) as file:
    lines = file.readlines()[2:] # ignore first 2 lines 
    for i, line in enumerate(lines):            
            splitted = line.split(";")            
            s = splitted[3].replace(",",".")
            lp1_heating[i] = float(s)  

print(lp1_heating )
{0: 0.013816233, 1: 0.013816233, 2: 0.013816233, 3: 0.013816233}

【讨论】:

  • 这不能回答问题。您只需重写询问者的代码,没有功能差异。他甚至承认错误出在文件格式上。
【解决方案2】:

这可能意味着所说的。您的变量 s 是一个不是浮点数的字符串。 您可以尝试添加此 sn-p 以打印/查找有问题的字符串。

try:
    lp1.heating_list[i-2] = float(s) 
except ValueError:
    print("tried to convert {} on line {}".format(s, i))

另见类似问题:https://stackoverflow.com/a/8420179/4295853

【讨论】:

  • 非常感谢!文件的最后两行看起来也不同。我忽略了这一点,你的代码暗示了我这个问题。愚蠢的我=)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多