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

Python Jupyter笔记本:显示数据框,以便单击单元格在文件资源管理器(例如Windows资源管理器)中打开文件,python,jupyter-notebook,external,Python,Jupyter Notebook,External,有没有一种方法可以在Jupyter笔记本中显示数据帧,以便单击单元格可以在给定目录中打开Windows资源管理器(或任何其他本机资源管理器) 我试过了 def make_clickable(url): return f'<a href="{url}" target="_blank">{url}</a>' df = pd.DataFrame({'dir': '.'}, index=[0]) styled = df.style

有没有一种方法可以在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)
def make_可点击(url):
返回f“”
df=pd.DataFrame({'dir':'.'.},索引=[0])
styled=df.style.format({'dir':使_可点击})
显示(样式化)
df=pd.DataFrame({'dir':'file:///C:/“},索引=[0])
styled=df.style.format({'dir':使_可点击})
显示(样式化)
前者打开一个新的浏览器选项卡,其中显示Jupyter树(如果我用另一个相对路径替换
,则位于正确的相对位置)

后者什么也不做。如果我右键单击新选项卡中的“打开”,它会显示“关于空白”#已阻止”,如果我复制并粘贴到新选项卡地址行中,它会显示浏览器内置的资源管理器,而不是Windows资源管理器

我尝试用
\u explorer.exe
替换
\u blank
,但这两种变体都没有改变任何东西

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

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

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


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

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

如果我错了,请纠正我

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

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

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

    如果我错了,请纠正我

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

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

  • 我迟到了一点,但我终于明白了。出于安全原因,Javascript本身无法打开文件资源管理器。但是,javascript可以在Jupyter笔记本(
    Jupyter.notebook.kernel.execute
    )中执行python代码,python可以使用(
    os.startfile('..)
    子进程运行
    等)打开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)
    
    将熊猫作为pd导入
    导入操作系统
    导入子流程
    windowsv1=“”
    文件资源管理器

    """ windowsv2=“” 文件管理器

    """ linux=”“” 文件管理器

    """ def使_可点击(url): 返回windowsv2 df=pd.DataFrame({'dir':'.'.},索引=[0]) styled=df.style.format({'dir':使_可点击}) 显示(样式化)
    我迟到了一点,但我终于明白了。出于安全原因,Javascript本身无法打开文件资源管理器。但是,javascript可以在Jupyter笔记本(
    Jupyter.notebook.kernel.execute
    )中执行python代码,python可以使用(
    os.startfile('..)
    子进程运行
    等)打开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)
    
    将熊猫作为pd导入
    导入操作系统
    导入子流程
    windowsv1=“”
    文件资源管理器

    """ windowsv2=“” 文件管理器

    """ linux=”“” 文件管理器

    """ def使_可点击(url): 返回windowsv2 df=pd.DataFrame({'dir':'.'.},索引=[0]) styled=df.style.format({'dir':使_可点击}) 显示(样式化)
    我自己已经指出了这一点。但是正如我所说的,在一个普通的Jupyter单元格中编写
    os.startfile('.')
    表明有一种方法。关于编辑:谢谢,这似乎是我想要的。我仍然希望其他人能提供另一种解决方案,因为这有点侵入性,只适用于Chrome+WindowsI。我自己已经指出了这一点。但是正如我所说的,在一个普通的Jupyter单元格中编写
    os.startfile('.')
    表明有一种方法。关于编辑:谢谢,这似乎是我想要的。我仍然希望其他人能提供另一种解决方案,因为这有点侵入性,只适用于Chrome+Windows