为什么 os.path 引用项目路径而不是文件路径?
为什么 os.path 引用项目路径而不是文件路径?
文件夹的结构如下:
- python
- python study
- study.py
- a.txt
study.py中的代码如下:
import os
if(os.path.exists("a.txt")):
print("YES") # 我的真实代码不是这个
else:
print("NO")
通常我会像这样将python study文件夹作为pycharm项目打开:
结果是YES。
但是今天我不小心打开了python文件夹(而不是python study)作为pycharm项目并运行了代码。
结果是NO。最后,我发现它是指向python(项目路径)而不是.py文件所在的文件夹。这是什么目的?
在此之后,我在cmd中运行了这段代码,结果是YES。
我认为在与其他人一起开发项目时,这可能会带来一些问题。(如果有人使用记事本而不是pycharm编辑代码并在cmd中运行代码)。
为什么os.path引用项目路径而不是文件路径?
当您不指定文件的绝对路径时,它被默认为工作目录中的文件。
当您从名为'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__并不总是一个绝对路径。
在Jupyter笔记本中无法使用__file__,这里提供了一种更通用的替代解决方案。