Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在bokeh中加载csv文件的动态文件夹名称输入_Python_Bokeh - Fatal编程技术网

Python 在bokeh中加载csv文件的动态文件夹名称输入

Python 在bokeh中加载csv文件的动态文件夹名称输入,python,bokeh,Python,Bokeh,不同的CSV文件位于具有用户名的不同文件夹中,因此我希望使用文件夹名称(用户名)动态加载CSV文件。我正在使用csv文件生成一些分析。我在bokeh中使用了TextInput Glyph,但不知道如何给这个输入值文本以加载csv文件。有什么办法可以做到吗? 下面是我如何加载CSV文件的代码。”必须根据我们的输入动态更改代码中的“用户” from bokeh.layouts import widgetbox from bokeh.models import CustomJS, TextInput,

不同的CSV文件位于具有用户名的不同文件夹中,因此我希望使用文件夹名称(用户名)动态加载CSV文件。我正在使用csv文件生成一些分析。我在bokeh中使用了TextInput Glyph,但不知道如何给这个输入值文本以加载csv文件。有什么办法可以做到吗? 下面是我如何加载CSV文件的代码。”必须根据我们的输入动态更改代码中的“用户”

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)
您可以使用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))

另外,如果这没有帮助,请详细说明。

要捕获
TextInput
的值,必须调用
.on\u change
事件处理程序,并且需要一个持久的Bokeh服务器连接。在下面的示例中,在TextInput中输入的foldername(操作员名称)处显示
test.csv
文件的数据表(几秒钟后)。输入操作员名称时,将调用
my\u text\u input\u handler()
事件处理程序函数,
new
是更新的值(或输入的值)。我们使用此变量的值替换代码中的
user

注意:要运行此脚本,应将其保存到文件中,如
test.py
,并使用
bokeh-serve--show test.py
运行它。这将启动bokeh服务器连接

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))

我不想要目录中csv文件的完整列表。我想使用TextInput Glyph或其他一些工具在bokeh中动态更改文件夹名称。您的问题不清楚。您能展示一些您在Bokeh中尝试过的文本输入标志符号代码吗?您希望如何将信息从
数据
检索到TextInput?阅读csv后,还不清楚数据框的外观。我已经添加了代码。text在加载csv文件时应在“用户”处添加用户键入的文本输入。用
text\u input
变量替换
'user'
怎么样?尝试过了,它不起作用。您收到任何错误吗?如果是,请分享错误谢谢,我的问题是我正在对df进行处理以生成分析(图),但在您提供的代码中,“df”位于函数“my_text_handler”中,因此,我无法在函数外使用df。如何在函数外使用该数据框?您可以在该函数内获得分析图,用显示图形的逻辑替换
DataTable
的逻辑。
DataTable
只是一个示例,表明当用户提供文本输入时会调用
my_text\u input\u handler
,此事件处理程序函数可以:将csv读入数据框,还可以显示分析图(或使用数据框显示您想要的任何内容)。我正在从主文件调用其他6个分析脚本。每个脚本都使用主文件中的一些已处理变量,并将输出显示为单独的选项卡布局。那么,我如何在函数中写下这整件事呢?是的,这是可能的。无论对每个脚本独立执行什么操作,都可以将其放入此事件处理程序函数中。或者,编写另一个具有所有脚本和分析逻辑的函数。然后,在此事件处理程序函数中调用该函数。谢谢,获得了解决方案,
curdoc().clear()
将清除前面的内容。