Python拒绝将字符串转换为float

时间:2016-02-04 18:50:42

标签: python python-2.7

我正在读取来自.txt文件的数据,如下所示:

Time    Date    Inlet Gas   skin #1 SKIN #2 OUT GAS 
        °C  °C  °C  °C  
15:28:55    4/11/2015    2.826471e+001   2.217617e+001   2.408844e+001   2.771613e+001  

当我阅读它时,我会花时间和日期将它们组合成一个strptime对象并组成一个新的dict。我还从第一行读取标签并将其用作新词典的键。我稍后在脚本中遇到错误,该错误表示要对值进行舍入,需要浮点数。当我标记“float(a)for a”行时,变量资源管理器告诉我a的“type”是一个string_,它的值是“2.826471e + 001”(引用我的)。我尝试了ast eval选项但它没有用。

dict_labels = [label for label in labels if not label == 'Time' and not label == 'Date' and not label == '']    
current_array =np.array(current_array)    
temp_dict = {}

temp_dict['Dates_Times'] = [datetime.strptime(i + ' ' + j, dateformat) for i,j in zip(current_array[:][:,labels.index('Date')], current_array[:][:,labels.index('Time')])]
for label in dict_labels:
    temp_dict[label] = [float(a) for a in current_array[:][:,labels.index(label)]]

2 个答案:

答案 0 :(得分:1)

一种选择是分割字符串,然后自己计算出数学。

即。 2.826471e+001等于2.826471 * 10^1

所以使用代码:

temp_dict[label] = [float(a.split('e+')[0])*pow(10, int(a.split('e+')[1])) for a in current_array[:][:,labels.index(label)]]

答案 1 :(得分:0)

还有一些其他问题,在Python 2和3中都可以轻松地转换该字符串。

>>> float("2.826471e+001")
28.26471