使用numpy.genfromtxt读取sqlite3.Binary对象

时间:2014-07-27 18:31:54

标签: python numpy sqlite

我有一个文本文件,其中包含一个大字符串,该字符串最初是SQL列中的二进制blob。我想使用numpy.genfromtxt读取数据并将文本转换为1D numpy数组,然后转换为二进制blob,以便稍后使用converter参数导入SQL:

       np.genfromtxt(data, delimiter='\t',
              dtype = [ ("a", 'f8'), ("b", 'U100'), ("c", 'f8') ],
              converters = {1: lambda x: sqlite3.Binary(
                     np.fromstring(x, dtype='f4', sep=' '))})

imput文件将是这样的:

1.0 \ t1.0 2.0 3.0 \ t1.0

然而,这会给出错误消息:

  File "./import_sql.py", line 25, in <module>
    converters = {19: lambda x: sqlite3.Binary(
  File "/usr/lib/python3.4/site-packages/numpy/lib/npyio.py", line 1742, in genfromtxt
    rows = np.array(data, dtype=[('', _) for _ in dtype_flat])
ValueError: cannot set an array element with a sequence

我想让genfromtxt返回一个数组,其中第一列和第三列将包含浮点值,第二列包含带有1D numpy数组的sqlite3.Binary blob数据。

这不起作用所以我已经将数据读入genfromtxt输出中的大字符串,然后在将数据写入数据库之前对其进行处理。是否可以将sqlite3.Binary对象包含在numpy数组中?

1 个答案:

答案 0 :(得分:1)

您只需将列b的类型从'U100'类型切换为object,然后就可以了。