不同的CSV文件位于具有用户名的不同文件夹中,因此我想使用文件夹名称(user_name)动态加载csv文件。我正在使用csv文件生成一些分析。我在散景中使用TextInput Glyph但不知道如何给这个输入值文本加载csv文件。有没有办法做散景?下面是代码,我如何加载CSV文件。代码中的'user'必须根据我们的输入动态更改。
from bokeh.layouts import widgetbox
from bokeh.models import CustomJS, TextInput, Paragraph
from bokeh.plotting import output_file, show
welcome_message = 'You have selected: (none)'
text_banner = Paragraph(text=welcome_message, width=200, height=100)
def callback_print(text_banner=text_banner):
user_input = str(cb_obj.value)
welcome_message = user_input
text_banner.text = welcome_message
text_input = TextInput( title="Enter operator Name:",callback=CustomJS.from_py_func(callback_print))
widg = widgetbox(text_input, text_banner)
show(widg)
data = pd.read_csv(join(dirname(__file__),'user','test1.txt'), sep=",", names=col_names,na_filter =None)
要捕获TextInput
的值,必须调用.on_change
事件处理程序,并且需要持久的Bokeh服务器连接。在以下示例中,将在TextInput中输入的foldername(运算符名称)中显示的test.csv
文件显示(几秒钟后)DataTable。输入操作员名称时调用my_text_input_handler()
事件处理函数,new
是更新值(或输入的值)。我们使用此变量的值来替换代码中的user
。
注意:要运行此脚本,您应将其保存到test.py
等文件中,并使用bokeh serve --show test.py
运行它。这将启动散景服务器连接。
from bokeh.layouts import widgetbox, gridplot
from bokeh.models import CustomJS, TextInput, Paragraph, DataTable, ColumnDataSource
from bokeh.plotting import curdoc
from bokeh.models.widgets import DataTable, DateFormatter, TableColumn
import os
import pandas as pd
welcome_message = 'Operator selected: (none)'
text_banner = Paragraph(text=welcome_message, width=200, height=100)
def callback_print(text_banner=text_banner):
user_input = str(cb_obj.value)
welcome_message = 'Operator selected: ' + user_input
text_banner.text = welcome_message
def my_text_input_handler(attr, old, new):
print("Previous label: " + old)
print("Updated label: " + new)
basename = os.path.dirname(os.path.realpath('__file__'))
df = pd.read_csv(os.path.join(basename,str(new),'test.csv'), sep=",", na_filter =None)
Columns = [TableColumn(field=Ci, title=Ci, width=70) for Ci in df.columns]
data_table = DataTable(columns=Columns, source=ColumnDataSource(df), width=1500)
curdoc().add_root(gridplot([[data_table]], sizing_mode='scale_both'))
text_input = TextInput( title="Enter operator Name:",callback=CustomJS.from_py_func(callback_print))
text_input.on_change('value', my_text_input_handler)
curdoc().add_root(widgetbox(text_input, text_banner))
您可以使用os模块中的os.walk(),这将返回目录中的所有csv文件。
list_csv = []
def parse_csv(d):
global list_csv
for root,subdirs,files in os.walk(d):
list_csv.extend([os.path.join(root,f) for f in files if '.csv' in f])
for sd in subdirs:
parse_csv(os.path.join(d,sd))
另外,如果这没有帮助,请你详细说明一下。