Dataframe Bokeh服务器:使用FileInput小部件导入.csv文件并将其传递给ColumnDataSource
我有一个csv文件,其中包含要打印的数据(x、y和其他字段),并希望使用新的FileInput小部件导入该文件。我没有足够的知识来操作来自FileInput的“base64”字符串以将其传递给dataframe的ColumnDataSourceDataframe 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
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结构很容易做到这一点,但是其他文件格式呢