PyScript读取本地CSV文件失败问题求助
解决PyScript无法读取本地磁盘CSV文件的问题
核心原因
PyScript运行在浏览器的Pyodide沙箱环境中,和本地Python环境完全不同——浏览器的安全机制禁止脚本直接访问本地磁盘的绝对路径(比如U:\Project\df.csv),这就是为什么你在普通Python里能跑的代码,到PyScript里就报错。报错里的双反斜杠只是字符串转义的显示问题,不是根本原因。
可行解决方案
方案1:将CSV文件放到Web服务器目录,用相对路径读取
把你的df.csv和HTML文件放在同一个文件夹下(也就是localhost服务的根目录),然后修改代码用相对路径读取:
import pandas as pd df = pd.read_csv('df.csv', sep='\t')
这样PyScript会通过Web请求获取服务器上的文件,符合浏览器的安全规则。
方案2:让用户主动上传文件(适合需要读取本地任意文件的场景)
用HTML的文件上传组件,让用户选择本地文件后,PyScript再读取文件内容。示例代码:
<body> <input type="file" id="file-input" accept=".csv"> <py-script> import pandas as pd from pyodide import create_proxy from js import document from io import StringIO def handle_upload(event): file = event.target.files[0] if not file: return # 创建FileReader读取文件内容 reader = js.FileReader.new() reader.onload = create_proxy(lambda e: parse_csv(e.target.result)) reader.readAsText(file) def parse_csv(content): # 用StringIO把文本内容转为pandas可读取的对象 df = pd.read_csv(StringIO(content), sep='\t') # 这里可以添加数据处理或展示逻辑,比如打印前5行 print(df.head()) # 绑定文件上传事件 file_input = document.getElementById("file-input") file_input.addEventListener("change", create_proxy(handle_upload)) </py-script> </body>
注意事项
- 永远不要在PyScript里使用本地磁盘的绝对路径(比如
U:\、C:\),浏览器沙箱会直接拦截这类请求。 - 如果用方案1,要确保你的localhost服务正确指向了包含HTML和CSV文件的目录(比如用
python -m http.server启动服务时,要在该目录下执行命令)。
内容的提问来源于stack exchange,提问作者Rav86
相关产品推荐
相关产品推荐

