Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PythonBokeh-上载zip文件并更新数据源_Python_File Upload_Bokeh_Zipfile - Fatal编程技术网

PythonBokeh-上载zip文件并更新数据源

PythonBokeh-上载zip文件并更新数据源,python,file-upload,bokeh,zipfile,Python,File Upload,Bokeh,Zipfile,我想使用Bokeh FileInput和一个按钮来上传zip文件,从cvs中提取数据并更新数据源。我有从本地目录上传zip文件的代码,提取和读取csv文件;但是我正在努力用Bokeh创建回调,以获得与下面代码相同的结果 求求你,欢迎任何帮助。我不知道怎么解决这个问题。谢谢大家! 上传/读取zip文件工作代码: import zipfile import os import pandas as pd import glob file_name = 'somefile.zip' path = os

我想使用Bokeh FileInput和一个按钮来上传zip文件,从cvs中提取数据并更新数据源。我有从本地目录上传zip文件的代码,提取和读取csv文件;但是我正在努力用Bokeh创建回调,以获得与下面代码相同的结果

求求你,欢迎任何帮助。我不知道怎么解决这个问题。谢谢大家!

上传/读取zip文件工作代码:

import zipfile
import os
import pandas as pd
import glob

file_name = 'somefile.zip'
path = os.path.abspath(os.getcwd())

def upload():   
    with zipfile.ZipFile(file_name, 'r') as file:
        file.extractall(path = path)
        file.close()
if __name__ == '__main__': upload()

path = os.path.abspath(os.getcwd())+'/' + file_name[:-4] + '/*.csv'
for fname in glob.glob(path):
   df=pd.read_csv(fname, encoding='latin1', sep='\t')
要定义的bokeh回调的实现:

from bokeh.io import curdoc, output_file, show
from bokeh.models import CustomJS, ColumnDataSource, Div, Button, FileInput
from bokeh.layouts import layout, widgetbox

callbackUpload = CustomJS(args=dict(source=source), code="""
    ???

    }
    source.change.emit();
""")
#Div: heading
h_input = Div(text="""<h2>Upload your zip file</h2> """, max_height=40)

#File input
file_input = FileInput()

#Button: upload a new zip achive
button = Button(label="Upload", button_type="danger")
button.js_on_event(events.ButtonClick, callbackUpload)

source = ColumnDataSource(df)

layout = widgetbox(h_input, file_input, button)
show(layout)

对于要使用Bokeh回调的zip提取Python代码,必须使用Bokeh serve和curdoc.add_root而不是show

一些例子,让你开始。请注意,我不使用此处的按钮启动上载过程,因为当您选择一个文件时,它将立即自动上载,因为FileInput.value属性已更改

进口拉链 从base64导入B64解码 从io导入字节io 来自bokeh.io导入展 从bokeh.layouts导入列 从bokeh.models导入ColumnDataSource、Div、FileInput h_input=Divtext=上传zip文件,最大高度=40 文件输入=文件输入 source=ColumnDataSourcedict def值_changedattr,旧的,新的: 数据=B641新 zipfile.ZipFileBytesIOdata作为zf: 无需调用`zf.close`-`with`块为您执行此操作。 ... 文件输入。更改“值”时,值更改 showcolumnh\u输入、文件\u输入
如果你想坚持使用CustomJS并不惜一切代价避免使用bokeh serve,那么你必须找到一些JavaScript库,用于在浏览器中进行zip归档提取,可能通过一个自定义bokeh模板将其附加到你的页面,该模板可以传递给save-show目前不支持它,并在传递给CustomJS的JS代码中使用它。

这只是一个中间步骤,直到我找到如何处理zip文件的解决方案。在最后的设置中,它实际上是一个bokeh应用程序,集成到Django应用程序中。谢谢你的帮助,Eugene!我想我应该使用这个按钮来获得更好的用户体验。我有点困惑,现在不明白BokehServe是如何与Django服务器一起工作的,因此我不能说是否要坚持使用CustomJS。