【问题标题】:Python FileNotFoundError when using open()使用 open() 时出现 Python FileNotFoundError
【发布时间】:2016-05-25 17:49:45
【问题描述】:

我正在使用with open('myFile', 'rb') as file: 来读取文件。当使用python myProgram.py 运行程序时,一切正常。但是,一旦我尝试在没有 cd-ing 的情况下将其运行到 myProgram.py 的目录中并使用绝对路径(例如 python /home/myName/myCode/myProgram.py 我总是收到此错误消息:FileNotFoundError: [Errno 2] No such file or directory

那么为什么open() 的行为会根据 Python 程序的启动方式而有所不同呢?即使从绝对路径开始,有没有办法让事情顺利进行?

我已经尝试过open('/home/myName/myCode/myfile', 'rb') 但没有成功...

【问题讨论】:

  • 您确定文件在您认为的位置吗?
  • 在您可以运行程序的目录中运行“pwd”。发布结果。
  • 你也应该提供完整的追溯
  • 该文件与python程序在同一目录下。当我在程序运行的目录中运行pwd 时,它返回/home/myName/myCode。所以这正是我的程序和文件所在的目录。
  • 进程的当前工作目录和包含脚本的目录不一定是一回事。

标签: python linux command-line


【解决方案1】:

那么,为什么 open() 的行为会根据 Python 程序的启动方式而有所不同呢?即使从绝对路径开始,有没有办法让事情顺利进行?

因为这是标准行为。不仅适用于 Python,而且适用于所有应用程序(至少我所知道的所有应用程序)。假定相对路径(如“myfile”)位于当前目录中。当您从 shell 启动脚本时,该路径将根据您所在的目录而改变。如果不给出绝对路径,Python如何知道在这样的目录结构中使用哪个文件?

root
|-- dir1
|   `-- myFile
`-- dir2
    `-- myFile

open('/home/myName/myCode/myfile', 'rb') 你走在正确的轨道上。

【讨论】:

  • 谢谢,这完全有道理。我再次尝试使用open('/home/myName/myCode/myfile', 'rb'),现在它正在工作!
【解决方案2】:

假设您运行pwd,它返回/home/myName。如果你然后运行/home/myName/code/myProgram.py,你的程序的工作目录是not/home/myName/code;这是/home/myName。进程的工作目录继承自父进程,不是根据脚本所在位置设置的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    • 1970-01-01
    相关资源
    最近更新 更多