为什么 os.path 引用项目路径而不是文件路径?

8 浏览
0 Comments

为什么 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项目打开:

s

结果是YES。

但是今天我不小心打开了python文件夹(而不是python study)作为pycharm项目并运行了代码。

结果是NO。最后,我发现它是指向python(项目路径)而不是.py文件所在的文件夹。这是什么目的?

在此之后,我在cmd中运行了这段代码,结果是YES。

我认为在与其他人一起开发项目时,这可能会带来一些问题。(如果有人使用记事本而不是pycharm编辑代码并在cmd中运行代码)。

0
0 Comments

为什么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__,这里提供了一种更通用的替代解决方案。

0
0 Comments

问题的原因是os.path函数引用的是项目路径而不是文件路径。这可能导致问题的原因是os.path.exists函数返回False,即使物理路径存在,这可能是因为没有权限执行os.stat()函数。解决方法是使用os.path.abspath(os.curdir)函数来规范化绝对路径名,并确保有执行os.stat()函数的权限。

0