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

2024-06-16 13:52:19 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种方法可以在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资源管理器

我试着用_explorer.exe替换_blank,但这两种变体都没有改变

因此,这两种选择都远远不是我想要的

(我知道,安全……但是,这是针对完全离线设置的内部工具)

我知道在某种程度上可以从浏览器打开探索器,因为我可以在Jupyter单元格中使用os.startfile,所以我想也许有一种方法可以在单击数据帧的单元格时执行任意代码?也许这需要一些小部件

当然,我总是可以编写一个完整的Python GUI,但我真的不愿意


Tags: 数据方法urldfmakewindowsdir浏览器
2条回答

我不是百分之百的相信这一点,但我认为这将取决于您使用的浏览器。此外,我认为大多数浏览器会阻止这种行为,不允许网页链接打开文件浏览器

如果我错了,请纠正我

编辑2020-08-15

如果您安装了Chrome浏览器扩展,则可以执行此操作。 只需点击下面的链接。在你的代码为我工作之后

https://www.alphr.com/browse-and-open-folders-files-chrome/

  1. 向下滚动至标题“从Chrome打开任何本地文件”
  2. 遵循所有步骤
  3. 安装浏览器扩展名(以及额外的安装文件)后,不要忘记重新启动Chrome

我迟到了一点,但我终于明白了。出于安全原因,Javascript本身无法打开文件资源管理器。但是javascript可以在Jupyter笔记本(Jupyter.notebook.kernel.execute)中执行python代码,python可以使用(os.startfile('.')subprocess.run等)打开windows资源管理器

下面是代码。LinuxOne可以正常工作,但在windows中,浏览器会打开,但不会进入用户焦点。它还会在图标后面显示橙色的哔哔声,表示应该可以

import pandas as pd
import os
import subprocess

windowsv1 = """ 
<p onclick="Jupyter.notebook.kernel.execute(`os.startfile('C:\\Users')`)">File Explorer.</p>
"""
windowsv2 = """ 
<p onclick="Jupyter.notebook.kernel.execute(`subprocess.run(['explorer', 'C:\\Users'])`)">File Explorer.</p>
"""

linux = """ 
<p onclick="Jupyter.notebook.kernel.execute(`subprocess.call([opener, r'/home/equinox'])`)">File Explorer.</p>
"""

def make_clickable(url):
    return windowsv2

df = pd.DataFrame({'dir': '.'}, index=[0])
styled = df.style.format({'dir': make_clickable})
display(styled)

相关问题 更多 >