Javascript 上传带有复数的CSV文件,并在Bokeh web应用程序中读取

Javascript 上传带有复数的CSV文件,并在Bokeh web应用程序中读取,javascript,python,file-upload,bokeh,Javascript,Python,File Upload,Bokeh,我想上传一个带有复数的csv文件到bokeh web应用程序中。DuCorey的解决方案非常适用于整数和浮点,请参见: 但是,当我在models.py中将value_type从Int改为Complex,并在csv文件中插入一个复数时,它就不起作用了。我不想像DuCorey那样绘制导入的数组(在他的示例中也行不通)。只需导入值并f.e.打印即可 我更改了以下三个文件: models.py 来自bokeh.core.properties导入列表,字符串,Dict,Int,Complex,Float

我想上传一个带有复数的csv文件到bokeh web应用程序中。DuCorey的解决方案非常适用于整数和浮点,请参见: 但是,当我在models.py中将value_type从Int改为Complex,并在csv文件中插入一个复数时,它就不起作用了。我不想像DuCorey那样绘制导入的数组(在他的示例中也行不通)。只需导入值并f.e.打印即可

我更改了以下三个文件:

models.py

来自bokeh.core.properties导入列表,字符串,Dict,Int,Complex,Float
从bokeh.models导入LayoutDOM
类文件输入(LayoutDOM):
__实现\uuuu='static/js/extensions\u file\u input.coffee'
__javascript_uuu='./input_widget/static/js/papaparse.js'
value=String(help=”“”
选定的输入文件。
""")
文件名=字符串(help=”“”
输入文件的名称。
""")
accept=String(help=”“”
输入的可接受文件类型的字符串。这应该是
像普通html一样编写。
""")
数据=列表(Dict(键类型=字符串,值类型=复杂))
csv文件

x,y
1,2
3,3
3,5+1j
10,25
和main.py

来自bokeh.core.properties导入列表,字符串,Dict,Int
从bokeh.models导入LayoutDOM
从bokeh.layouts导入列
从bokeh.models导入按钮,ColumnDataSource
从bokeh.io导入curdoc
从bokeh.plotting导入图形
作为pd进口熊猫
从模型导入文件输入
按钮输入=文件输入(id=“fileSelect”,
accept=“.csv”)
def更改图数据(属性、旧、新):
新的数据帧(新的)
打印(新文档)
按钮输入。更改(“数据”,更改绘图数据)
布局=列(按钮\输入)
curdoc().添加根目录(布局)
我收到以下错误消息: 反序列化错误('Complex预期为Complex,got 5+1j')


谢谢你的建议

另一个示例中使用的方法使用JavaScript库对文件进行解析,并将其发送回。AFAIK这在这种情况下不起作用,原因有二:

  • papaparse
    JS库本身对解析复数一无所知
  • 实际上,我不确定将comlex值从JS发送回Python是否可行。好吧,你是自2013年以来第一个想尝试的人

我认为,要使此工作正常,最好的办法是将原始文件的全部内容发送回Bokeh服务器(作为一个大的
字符串
),然后使用Pandas从字符串解析文件

谢谢!您是否有或知道如何将文件的全部内容作为字符串输入Bokeh服务器的示例?我对它真的很陌生…在自定义扩展中,您可以添加一个
raw\u data=String(…)
属性。当您在JS中设置它时,它将自动发送到Python端,并且您可以有一个回调
my\u model.on\u change('raw\u data',…)
,它获取值并将其传递给pandas。我不知道如何读取本地文件,但很明显,您链接的示例中使用的库可以读取,因此您可以研究其源代码。研究papaparse的代码是一个好主意!在这种情况下,阅读文档就足够了。只需在models.py中设置papaparse选项
dynamicTyping:false
并更改
values\u type=String
。瓦鲁