如何用划线浏览到文件夹?

2022-04-19 00:00:00 python plotly-dash

问题描述

我正在学习Python Dashboard。我知道有一个Dash核心组件Upload允许上传一个文件。我需要的是加载文件夹中的所有文件。我想知道如何使用核心组件浏览到选定的文件夹,然后读取该文件夹中的所有文件。

提前谢谢。


解决方案

可以使用os内置库在托管Dash应用的服务器内导航文件-如果您在本地运行,这意味着您的计算机,或者如果您在云上托管,则在VM上导航。

正如ThangNguyen提到的,不可能在客户端浏览文件。因此,如果你的应用托管在云实例上,它将无法读取你用来访问该应用的计算机上的文件。

如果您的目标确实是导航服务器上的文件,则可以使用以下代码:

import os

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output, State

app = dash.Dash(__name__)
server = app.server

folders = ["images", "spreadsheets"]

controls = [
    dcc.Dropdown(
        id="dropdown",
        options=[{"label": x, "value": x} for x in folders],
        value=folders[0],
    )
]

app.layout = html.Div(
    [html.H1("File Browser"), html.Div(controls), html.Div(id="folder-files")]
)


@app.callback(Output("folder-files", "children"), Input("dropdown", "value"))
def list_all_files(folder_name):
    # This is relative, but you should be able
    # able to provide the absolute path too
    file_names = os.listdir(folder_name)

    file_list = html.Ul([html.Li(file) for file in file_names])

    return file_list


if __name__ == "__main__":
    app.run_server(debug=True)

给定如下文件夹结构:

您应该获得以下应用程序:

相关文章