Python Bokeh-上传一个zip文件并更新数据源

问题描述 投票:0回答:1

我想使用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)
python file-upload bokeh zipfile
1个回答
0
投票

要使您的以压缩方式提取的Python代码与Bokeh回调一起使用,您将必须使用bokeh servecurdoc().add_root而不是show

[如果您想坚持使用CustomJS并避免不惜一切代价使用bokeh serve,那么您必须找到一些JavaScript库来提取可在浏览器中使用的zip存档,将其附加到您的页面上(可能通过自定义的Bokeh模板可以传递给save的代码-show目前不支持它),并在传递给CustomJS的JS代码中使用它。

© www.soinside.com 2019 - 2024. All rights reserved.