Я хочу использовать 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')
Реализация с боке (обратный вызов будет определен):
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)