Dataframe Bokeh服务器:使用FileInput小部件导入.csv文件并将其传递给ColumnDataSource

Dataframe Bokeh服务器:使用FileInput小部件导入.csv文件并将其传递给ColumnDataSource,dataframe,file-io,widget,bokeh,Dataframe,File Io,Widget,Bokeh,我有一个csv文件,其中包含要打印的数据(x、y和其他字段),并希望使用新的FileInput小部件导入该文件。我没有足够的知识来操作来自FileInput的“base64”字符串以将其传递给dataframe的ColumnDataSource from bokeh.io import curdoc from bokeh.models.widgets import FileInput def update_cds(attr, old, new): #A code here to ext

我有一个csv文件,其中包含要打印的数据(x、y和其他字段),并希望使用新的FileInput小部件导入该文件。我没有足够的知识来操作来自FileInput的“base64”字符串以将其传递给dataframe的ColumnDataSource

from bokeh.io import curdoc
from bokeh.models.widgets import FileInput

def update_cds(attr, old, new):
    #A code here to extract column names and data
    #from file_input and pass it to a ColumnDataSource or a DataFrame
file_input = FileInput(accept=".csv")
file_input.on_change('value', update_cds)

doc=curdoc()
doc.add_root(file_input)
谢谢你的帮助

Python有一个内置的标准库模块:

import base64

data = base64.b64decode(encoded)
Python具有内置的标准库模块:

import base64

data = base64.b64decode(encoded)

这里有一个可行的解决方案:代码将把csv文件上传到服务器端的“数据”文件夹中(之前创建)。然后很容易打开csv并将其传递给ColumnDataSource(例如)

#widget
file_input = FileInput(accept=".csv")

def upload_csv_to_server(attr, old, new):

    #decode base64 format (from python base24 website)
    base64_message = file_input.value
    base64_bytes = base64_message.encode('ascii')
    message_bytes = base64.b64decode(base64_bytes)
    message = message_bytes.decode('ascii')

    #convert string to csv and save it on the server side
    message_list = message.splitlines()
    with open('data/' + file_input.filename, 'w', newline='') as file:
        writer = csv.writer(file)
        for i in range(len(message_list)):
            writer.writerow(message_list[i].split(','))

file_input.on_change('value', upload_csv_to_server)

如果你有更好的办法,请告诉我。csv结构很容易做到这一点,但其他文件格式如何?

这里有一个可行的解决方案:代码将csv文件上传到服务器端的“数据”文件夹中(之前创建)。然后很容易打开csv并将其传递给ColumnDataSource(例如)

#widget
file_input = FileInput(accept=".csv")

def upload_csv_to_server(attr, old, new):

    #decode base64 format (from python base24 website)
    base64_message = file_input.value
    base64_bytes = base64_message.encode('ascii')
    message_bytes = base64.b64decode(base64_bytes)
    message = message_bytes.decode('ascii')

    #convert string to csv and save it on the server side
    message_list = message.splitlines()
    with open('data/' + file_input.filename, 'w', newline='') as file:
        writer = csv.writer(file)
        for i in range(len(message_list)):
            writer.writerow(message_list[i].split(','))

file_input.on_change('value', upload_csv_to_server)
如果你有更好的办法,请告诉我。csv结构很容易做到这一点,但是其他文件格式呢