显示数据框,以便单击单元格在文件资源管理器(例如 Windows 资源管理器)中打开文件

有没有办法在 Jupyter 笔记本中显示数据框,以便单击单元格在给定目录中打开 Windows 资源管理器(或任何其他本机资源管理器)?


我试过


def make_clickable(url):

    return f'<a href="{url}" target="_blank">{url}</a>'


df = pd.DataFrame({'dir': '.'}, index=[0])

styled = df.style.format({'dir': make_clickable})

display(styled)


df = pd.DataFrame({'dir': 'file:///C:/'}, index=[0])

styled = df.style.format({'dir': make_clickable})

display(styled)

前者打开一个新的浏览器选项卡,其中显示了 Jupyter 树(在正确的相对位置,如果我.用另一个相对路径替换)。


后者什么都不做。如果我右键单击在新选项卡中打开,它会显示about blank#blocked,如果我将其复制并粘贴到新选项卡地址行,它会显示浏览器内置资源管理器,而不是 Windows 资源管理器。


我尝试替换_blank为_explorer.exe,但这对任一变体都没有任何改变。


因此,这两种选择都远非我想要的。


(我知道,安全......但是,这是一个完全离线设置的内部工具)


我知道以某种方式可以从浏览器打开资源管理器,因为我只能os.startfile在 Jupyter 单元格中使用,所以我在想也许有一种方法可以在单击数据框的单元格时执行任意代码?也许这需要某种小部件?


当然,我总是可以编写一个完整的 Python GUI,但我真的不想这样做。


largeQ
浏览 78回答 2
2回答

烙印99

我有点晚了,但我终于想通了。出于安全原因,Javascript 本身无法打开文件资源管理器。然而,javascript 可以在 Jupyter notebook() 中执行 python 代码,python 可以使用(等)Jupyter.notebook.kernel.execute打开 Windows 资源管理器。os.startfile('.')subprocess.run下面是代码。linux 一个按预期工作正常,但随着 windows 资源管理器打开但不会进入用户焦点,它还会显示图标后面的橙色蜂鸣声表明它应该没问题。import pandas as pdimport osimport subprocesswindowsv1 = """&nbsp;<p onclick="Jupyter.notebook.kernel.execute(`os.startfile('C:\\Users')`)">File Explorer.</p>"""windowsv2 = """&nbsp;<p onclick="Jupyter.notebook.kernel.execute(`subprocess.run(['explorer', 'C:\\Users'])`)">File Explorer.</p>"""linux = """&nbsp;<p onclick="Jupyter.notebook.kernel.execute(`subprocess.call([opener, r'/home/equinox'])`)">File Explorer.</p>"""def make_clickable(url):&nbsp; &nbsp; return windowsv2df = pd.DataFrame({'dir': '.'}, index=[0])styled = df.style.format({'dir': make_clickable})display(styled)

饮歌长啸

我对此不是 100%,但我认为这将取决于您使用的浏览器。此外,我认为大多数浏览器都会阻止这种行为,并且不允许网页链接打开您的文件浏览器。如果我错了,请有人纠正我。如果您安装 Chrome 浏览器扩展程序,则可以执行此操作。只需点击以下链接。在您的代码对我有用之后。向下滚动到标题“从 Chrome 打开任何本地文件”。按照所有步骤安装浏览器扩展(和额外的安装文件)后不要忘记重新启动 Chrome
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python