2015-04-15 122 views
0

我试图访问Microsoft Access数据库表中的某些列,其中包含double类型的数字,但是出现标题中提到的错误。查询数据库如下所示,错误发生在执行cur.execute(....)命令的行中。基本上我试图过滤掉在特定时间间隔内捕获的数据。如果我排除在cur.execute(....)命令中包含双数据类型的列CM3_Up,CG3_Up,CM3_Down,CG3_Down,我不会得到错误。同样的逻辑被用来从其他表访问双数据类型,它工作正常,我不知道什么是错的。ValueError:无法将字符串转换为浮点数:E-3

代码:

start =datetime.datetime(2015,03,28,00,00) 
a=start 
b=start+datetime.timedelta(0,240) 
r=7 
while a < (start+datetime.timedelta(1)): 
    params = (a,b) 
    sql = "SELECT Date_Time, CM3_Up, CG3_Up, CM3_Down, CG3_Down FROM 
      Lysimeter_Facility_Data_5 WHERE Date_Time >= ? AND Date_Time <= ?" 
    for row in cur.execute(sql,params): 
     if row is None: 
      continue 
     r = r+1 
     ws.cell(row = r,column=12).value = row.get('CM3_Up') 
     ws.cell(row = r,column=13).value = row.get('CG3_Up') 
     ws.cell(row = r,column=14).value = row.get('CM3_Down') 
     ws.cell(row = r,column=15).value = row.get('CG3_Down') 

    a = a+five_min 
    b = b+five_min 
wb.save('..\SE_SW_Lysimeters_Weather_Mass_Experiment-02_03_26_2015.xlsx') 

完全错误报告:

Traceback (most recent call last): 
    File "C:\DB_PY\access_mdb\db_to_xl.py", line 318, in <module> 
    for row in cur.execute(sql,params): 
    File "build\bdist.win32\egg\pypyodbc.py", line 1920, in next 
    row = self.fetchone() 
    File "build\bdist.win32\egg\pypyodbc.py", line 1871, in fetchone 
    value_list.append(buf_cvt_func(alloc_buffer.value)) 
ValueError: could not convert string to float: E-3 

回答

0

这听起来像你收到这样 '2.34E-3' 字符串,所以用转换尝试。不知道Python,但在C#中它可能是这样的:

ws.cell(row = r,column=12).value = Convert.ToDouble(row.get('CM3_Up')) 
ws.cell(row = r,column=13).value = Convert.ToDouble(row.get('CG3_Up')) 
ws.cell(row = r,column=14).value = Convert.ToDouble(row.get('CM3_Down')) 
ws.cell(row = r,column=15).value = Convert.ToDouble(row.get('CG3_Down')) 
+0

在Python中,它将是float(row.get('CM3_Up'))'。 –

+0

我试过float(row.get('CM3_Up'))但显示相同的错误。只需添加一些细节,从访问数据库中读取的值如下所示:-2.91953029510136(CM3_Up),-84.8983788757143(CG3_Up),3.04633983884509(CM3_Down), - 5.80184926507136(CG3_Down)。 – Mukunda

+0

@Mukunda - 你能提供一个小样本数据库与导致错误的表?如果是这样,请将其上传到互联网可访问的位置(如[Wikisend](http://wikisend.com/)),并在此处发布链接,以便我们尝试重新创建问题。 –

0

至于这个讨论: Python: trouble reading number format

的麻烦可以,电子应该是d,如:

float(row.get('CM3_Up').replace('E', 'D')) 

虽然听起来很奇怪,但我只知道Python的一点点。

+0

这个解决方案没有工作 – Mukunda

+0

然后我出来的想法,对不起。 – Gustav

相关问题