Python 在genfromtxt中使用转换器函数失败

Python 在genfromtxt中使用转换器函数失败,python,numpy,python-3.x,matplotlib,genfromtxt,Python,Numpy,Python 3.x,Matplotlib,Genfromtxt,当我尝试使用genfromtxt读取以空格分隔的文件,并使用转换函数转换以逗号作为小数分隔符的数字时,我得到一个类型错误。我的转换器功能似乎有问题。但是,当我在单个值上使用它时,它确实可以正常工作 这是我的代码(我使用的是Matplotlib/Pylab): 数据如下所示: Date Time Cond Temp 11-10-2012 00:00:14 5,430583 29,5107 11-10-2012 00:00:15 5,431812 29,45066 11-10-2012 00:00:

当我尝试使用genfromtxt读取以空格分隔的文件,并使用转换函数转换以逗号作为小数分隔符的数字时,我得到一个类型错误。我的转换器功能似乎有问题。但是,当我在单个值上使用它时,它确实可以正常工作

这是我的代码(我使用的是Matplotlib/Pylab):

数据如下所示:

Date Time Cond Temp
11-10-2012 00:00:14 5,430583 29,5107
11-10-2012 00:00:15 5,431812 29,45066
11-10-2012 00:00:16 5,435501 29,43862
11-10-2012 00:00:17 5,436732 29,43862
...
这是错误消息的一部分:


TypeError回溯(最近一次调用)
在()
5c={2:conv,3:conv}
6.
---->7 data=genfromtxt('Example.csv',dtype=t,skip_header=1,delimiter='',converters=c)
...
在(VALTR)
1 t=数据类型([('Date','U12'),('Time','U10'),('Cond','f4'),('Temp','f4'))
2.
---->3 conv=lambda valstr:float(valstr.replace(',','))
4.
5c={2:conv,3:conv}
TypeError:应为具有缓冲区接口的对象
我是做错了什么,还是这是genfromtxt中的某种错误


我正在Win7 x64上使用Python 3.2。Numpy版本是1.6.2。

显然,genfromtxt将读取列作为字节字符串而不是unicode字符串提供给转换器函数

通过如下更改转换器功能的代码,为我解决了该问题:

conv = lambda valstr: float(valstr.decode("utf-8").replace(',','.'))

FWIW,您的代码在Ubuntu 12.04(64位)中的Python 2.7.3上运行良好。在谷歌搜索了一位之后,当unicode字符串函数应用于字节字符串时,似乎会发生此特定类型的错误。一个小测试证实了这一点:b'test'。replace('t','r')给出了完全相同的错误。这似乎是一个Py3转换问题,这可能就是我的代码在Py2配置上工作的原因。
TypeError                                 Traceback (most recent call last)
<ipython-input-41-c65c2d17c55d> in <module>()
      5 c = {2:conv, 3:conv}
      6 
----> 7 data = genfromtxt('Example.csv', dtype = t, skip_header=1, delimiter = ' ', converters = c)


...


<ipython-input-41-c65c2d17c55d> in <lambda>(valstr)
      1 t = dtype([('Date', 'U12'), ('Time', 'U10'), ('Cond', 'f4'), ('Temp', 'f4')])
      2 
----> 3 conv = lambda valstr: float(valstr.replace(',','.'))
      4 
      5 c = {2:conv, 3:conv}

TypeError: expected an object with the buffer interface
conv = lambda valstr: float(valstr.decode("utf-8").replace(',','.'))