如何浏览到带有破折号的文件夹?

时间:2018-10-25 02:32:04

标签: python plotly-dash

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

谢谢。

2 个答案:

答案 0 :(得分:1)

您可以使用 dash_core_components.Upload 组件并设置 multiple=True 来上传多个文件。下面是一个示例:https://dash.plotly.com/dash-core-components/upload

然而,这会一次性上传所有文件的所有内容。你不能用它做的只是获取文件夹的内容,这样你就可以一个一个地上传文件。

但是,由于您的问题关于上传文件夹中的所有文件,所以应该这样做。

答案 1 :(得分:0)

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

鉴于这样的文件夹结构:

folder structure

您应该获得以下应用:

demo of the app in action