从内核访问文件和笔记本#

从 JupyterLite 0.1.0b9 开始,用户文件浏览器的内容和一些内核(包括 Pyodide 内核)会自动同步。

例如,您可以将文件 file.csv 拖放到 JupyterLite UI 中,然后在 Python 中加载它。

import pandas as pd

data = pd.read_csv('file.csv')

data

同步内容通过挂载自定义 Emscripten 文件系统 (FS) 来实现,该文件系统通过 JupyterLite ServiceWorker 启用与 JupyterLite 内容管理器进行通信。

注意

ServiceWorker 并不总是启用,这取决于用户的浏览器和 HTTP 服务器的 限制

验证文件系统#

要检查文件系统同步是否启用,请查看 cwd 是否以 /drive/ 开头。

import os

os.getcwd()  # If successful:  "/drive/path/to/notebook"
             # ... otherwise:  "/home/pyodide"

获取远程内容#

也可以从远程 URL 获取内容。例如,如果您使用的是 Pyodide 内核,可以使用 fetch 函数来实现。

import pandas as pd
from js import fetch

URL = "https://raw.githubusercontent.com/jupyterlite/jupyterlite/main/examples/data/iris.csv"

res = await fetch(URL)
text = await res.text()

filename = 'data.csv'

with open(filename, 'w') as f:
    f.write(text)

data = pd.read_csv(filename, sep=',')
data

作为替代方案,您可以导入 pyodide-http 包(默认情况下与 Pyodide 一起分发),以便更无缝地使用熟悉的函数。

import pyodide_http
import pandas as pd

pyodide_http.patch_all()

data = pd.read_csv("https://raw.githubusercontent.com/jupyterlite/jupyterlite/main/examples/data/iris.csv")
data