#jupyter-notebook #ipywidgets
Вопрос:
Я использую FileUpload
ipywidget в Jupyter и хочу указать начальный каталог. Прямо сейчас у меня есть это:
import ipywidgets as widgets
my_widget = widgets.FileUpload(accept='.json', multiple=False)
После поиска в Google и просмотра исходного кода я не вижу, как указать начальный каталог, который откроется, когда пользователь нажмет на виджет. На рабочих станциях, которые мы используем на работе, все может быть особенно запутанным, поэтому это сэкономит много времени, если я смогу добавить это в качестве аргумента.
Я открыт для других простых вариантов, кроме использования ipywidgets для изучения каталогов / загрузки файлов в Jupyter, но в целом он работает очень хорошо.
Если это имеет значение, я в Windows 10.
Комментарии:
1. Я не думаю, что это можно сделать с помощью текущего API, вероятно, из-за проблемы, связанной с безопасностью. Кроме передаваемых данных файла, никакая другая информация не передается между виджетом и пользователем.
2. @ac24 Что я заметил, так это то, что после использования его один раз, при следующем использовании начинается исследование каталога, из которого я ранее загрузил файл. Если бы я мог понять, как это произошло, и просто воспроизвести это … хм.
3. Открыл проблему по этому поводу, и один из разработчиков согласился с вами, что это невозможно сделать, потому что это оболочка для html-элемента, который не предоставляет эту функциональность: github.com/jupyter-widgets/ipywidgets/issues/3305 . Я изучу
ipyfilechooser
, какой из виджетов относится к другому типу, и сообщу об этом, когда у меня будет время.4. Другой вариант, который вы могли бы сделать, — это объединить
glob
список локальных файлов в заранее определенном каталоге и выпадающий виджет для их перечисления. Это будет работать до тех пор, пока пользователи запускают ноутбук локально, очевидно, не будет работать удаленно.5. @ac24 хорошая идея, если вы уверены, что это правильный каталог (что я обычно и делаю, честно говоря).
Ответ №1:
Невозможно указать начальный каталог с помощью FileUpload
виджета. Это было проверено разработчиком ipywidgets в выпуске, посвященном этой теме. Вместо этого вы можете использовать другой пользовательский виджет, FileChooser
в репозитории ipyfilechooser, чтобы делать то, что вы хотите.
Сначала установите с pip install ipyfilechooser
помощью .
Затем в вашем ноутбуке:
from ipyfilechooser import FileChooser
starting_directory = 'C:/foo'
chooser = FileChooser(starting_directory)
display(chooser)
Чтобы увидеть некоторые атрибуты, которые вы, скорее всего, будете использовать:
print(chooser.selected_filename)
print(chooser.selected)
print(chooser.selected_path)
В репозитории обсуждается множество дополнительных опций.
Конечно, как только вы получите путь к нужному вам имени файла (например, C:/foo/foo.json
), вам нужно будет найти наилучший способ открыть файл, используя стандартные библиотеки для таких вещей.