【问题标题】:OSError: [Errno 22] Invalid argument: - Changing backslash to forward slash not helping! (Windows)OSError:[Errno 22] 无效参数:- 将反斜杠更改为正斜杠没有帮助! (视窗)
【发布时间】:2022-06-17 15:33:27
【问题描述】:

我正在使用 streamlit 创建一个工具,该工具接受用户输入(csv 文件名)并将输出清理/生成为数据框。我不断收到 OSError: [Errno 22] Invalid argument: 'M:/Desktop/AutomationProject/'

我知道这个错误的所有过去解决方案,但是他们都说在 Windows 上将反斜杠更改为正斜杠,这是一个快速修复,但是在这样做之后我仍然遇到同样的问题。

请注意,我的工具在输入文件名时仍然有效,只是一直显示错误(如下)

提前感谢您的帮助!

代码:

st.header('1 - Express Autocalls')

autocall_gbp_file = str(st.text_input("Please type in your Autocall File Name (GBP)"))

express_gbp = pd.read_csv("M:/Desktop/AutomationProject/" + autocall_gbp_file)

OSError: [Errno 22] 无效参数:'M:/Desktop/AutomationProject/' 追溯: _run_script 中的文件“C:\Users\adavie18.conda\envs\projectenv\lib\site->packages\streamlit\scriptrunner\script_runner.py”,第 475 行 exec(代码,模块。dict) 文件“M:\Desktop\AutomationProject\AutocallApp.py”,第 176 行,在 express_gbp = pd.read_csv("M:/Desktop/AutomationProject/" + autocall_gbp_file) 文件“C:\Users\adavie18.conda\envs\projectenv\lib\site-packages\pandas\util_decorators.py”,>第 311 行,在包装器中 返回函数(*args,**kwargs) 文件“C:\Users\adavie18.conda\envs\projectenv\lib\site-packages\pandas\io\parsers\readers.py”,>第 680 行,在 read_csv return _read(filepath_or_buffer, kwds) 文件“C:\Users\adavie18.conda\envs\projectenv\lib\site-packages\pandas\io\parsers\readers.py”,>第 575 行,在 _read parser = TextFileReader(filepath_or_buffer, **kwds) 文件“C:\Users\adavie18.conda\envs\projectenv\lib\site-packages\pandas\io\parsers\readers.py”,>第 933 行,在 init self._engine = self._make_engine(f, self.engine) 文件“C:\Users\adavie18.conda\envs\projectenv\lib\site-packages\pandas\io\parsers\readers.py”,>第 1217 行,在 _make_engine self.handles = get_handle(# type: ignore[call-overload] 文件“C:\Users\adavie18.conda\envs\projectenv\lib\site-packages\pandas\io\common.py”,第 789 行,> 在 get_handle 中 句柄 = 打开(

【问题讨论】:

  • read_csv 需要一个 csv 文件,但看起来你正在给它一个 python 文件M:\Desktop\AutomationProject\AutocallApp.py
  • @SembeiNorimaki 抱歉 - AutocallApp.py 是用于运行程序的文件的名称。用户输入是 filename.csv 所以我肯定是在提供一个 CSV 文件。我错过了什么吗?
  • 所以你能打印你传递给 read_csv 的内容吗?执行filename="M:/Desktop/AutomationProject/" + autocall_gbp_file' 之类的操作,然后执行print(filename)
  • 是的,我可以打印我通过的文件名,我只是在生成用户输入之前在我的流光页面上收到错误。我一直在尝试添加 try/except 以避免这种情况,但仍然没有运气!
  • @SteinnHauserMagnusson 这已经奏效了!非常感谢

标签: python python-3.x conda streamlit


【解决方案1】:

在 pythong 中保持跨平台操作系统路径一致的通常最佳做法是使用os 模块:

import os

path1 = "Desktop/" + "folder1/" + "folder2/"
with open(path1, "r") as file:
    pass 
    # here, script is not consistent across OS, 
    # and can be difficult to format correctly for Windows


# instead, do:
path2 = os.path.join("Desktop", "folder1", "folder2")
with open(path2, "r") as file:
    pass 
    # now, your script can find your Windows files, 
    # and the same script works for MacOS, Linux platforms

这有助于保持跨平台的一致性,因此您可以避免细致的字符串格式

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-09
    • 2013-07-10
    • 2021-12-31
    相关资源
    最近更新 更多