Windows下Streamlit报OSError: [Errno 22] 替换斜杠无效问题
问题根因
这个报错和路径斜杠写法没有关系,是Streamlit的运行逻辑导致的:
- 页面首次加载、用户还没在输入框输入内容时,
st.text_input的返回值默认为空字符串 - 此时拼接得到的路径为
M:/Desktop/AutomationProject/,这是一个文件夹路径,pandas尝试将其作为CSV文件读取时,自然会抛出无效参数错误 - 当你输入正确文件名后,路径拼接正确所以功能可以正常运行,但脚本每次重跑的初始空值状态都会触发一次报错,所以错误提示会持续出现
修复方法
- 增加输入非空判断:只有当用户确实输入了文件名之后,再执行读取CSV的逻辑
- 路径拼接改用
os.path.join实现,自动适配系统路径分隔符,避免手动拼接字符串带来的路径格式问题 - 可选增加文件存在性校验,避免用户输错文件名触发额外报错
修复后的参考代码:
import os import pandas as pd import streamlit as st # 定义基础目录 BASE_DIR = "M:/Desktop/AutomationProject/" st.header('1 - Express Autocalls') autocall_gbp_file = st.text_input("Please type in your Autocall File Name (GBP)") # 输入非空时才执行后续逻辑 if autocall_gbp_file: file_path = os.path.join(BASE_DIR, autocall_gbp_file) # 校验文件是否存在 if os.path.isfile(file_path): express_gbp = pd.read_csv(file_path) # 后续数据清洗、DataFrame输出逻辑在此处编写 st.dataframe(express_gbp.head()) else: st.error("当前输入的文件名对应文件不存在,请检查输入是否正确") else: st.info("请输入CSV文件名后开始数据处理")
- 如果你不想加条件判断,也可以给
st.text_input传入value参数设置一个默认存在的文件名作为初始值,保证首次加载时路径有效,但非空判断的方案交互逻辑更友好,更推荐使用。 - Windows环境下Python本身可以正常识别路径中的正斜杠,不需要特意替换为反斜杠。
内容的提问来源于stack exchange,提问作者Alfie Davies
相关产品推荐
相关产品推荐

