为啥 os.path 指的是项目路径而不是文件路径?
Posted
技术标签:
【中文标题】为啥 os.path 指的是项目路径而不是文件路径?【英文标题】:Why does os.path refer to the project path instead of file path?为什么 os.path 指的是项目路径而不是文件路径? 【发布时间】:2020-04-22 01:03:04 【问题描述】:这是文件夹的结构:
- python
- python study
- study.py
- a.txt
study.py中的代码是:
import os
if(os.path.exists("a.txt")):
print("YES") # my real code is not this
else:
print("NO")
通常我将python study
文件夹作为pycharm项目打开,像这样:
结果是YES
。
但是今天我不小心将python
文件夹(不是python study
)作为pycharm项目打开并运行代码。
结果是NO
。最后,我发现它引用了python
(项目路径)而不是.py文件的文件夹。这是什么目的?
之后,我在cmd中运行这段代码,结果是YES
。
我认为在与其他人一起开发项目时会带来一些问题。(如果有人使用记事本而不是pycharm来编辑代码并在cmd中运行代码)。
【问题讨论】:
我认为这不是问题。您确实需要知道您在哪个文件夹中工作,否则可能会出现比脚本未运行更大的问题:) os.path.exist("a.txt") 将检查该文件是否存在于脚本运行的当前文件夹中。 ***.com/questions/786376/…的可能重复 @marxmacher 好的,这是真的。 【参考方案1】:当您不指定文件的绝对路径时,假定它位于工作目录中。
当您从文件夹python
(即工作目录)打开项目时,os.path.exists('a.txt')
实际上是在文件夹python
中查找文件“a.txt”。
为了使您的脚本独立于工作目录。您应该使用相对路径。
您可以使用__file__
来引用您的脚本。您可以使用os.path.dirname
获取脚本的目录。
所以我认为您应该将代码修改为
import os
fname = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'a.txt')
if(os.path.exists(fname)):
print("YES")
else:
print("NO")
【讨论】:
实际上最好使用os.path.abspath(__file__)
,因为__file__
并不总是绝对路径。
使用 __file__ 在Jupyter notebook as noted here with an alternate solution that's more universal 中不起作用【参考方案2】:
编辑:试试这个而不是简单地调用路径存在,因为它应该规范化路径名路径的绝对版本:
os.path.abspath(os.curdir)
顺便说一下,根据this,如果未授予对请求的文件执行 os.stat() 的权限,即使路径物理存在,此函数也可能返回 False。所以请记住这一点。
【讨论】:
这与所描述的问题无关 发布 cmets 作为答案不会让您获得需要评论的声誉。 @MadPhysicist 好的,感谢您的提醒。我编辑了我的答案......不会再发生了:)以上是关于为啥 os.path 指的是项目路径而不是文件路径?的主要内容,如果未能解决你的问题,请参考以下文章