FileUpload ipywidget: как указать начальный каталог?

#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 ), вам нужно будет найти наилучший способ открыть файл, используя стандартные библиотеки для таких вещей.