我有一个文本文件,其中包含一个大字符串,该字符串最初是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数组中?
答案 0 :(得分:1)
您只需将列b
的类型从'U100'
类型切换为object
,然后就可以了。