我正在学习Python仪表板。我知道有一个Dash核心组件可以上传,允许上传文件。我需要的是将所有文件加载到文件夹中。我想知道如何使用核心组件浏览到选择文件夹,然后读取该文件夹中的所有文件。
谢谢。
答案 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)
鉴于这样的文件夹结构:
您应该获得以下应用: