Python 父文件夹脚本FileNotFoundError

Python 父文件夹脚本FileNotFoundError,python,path,file-not-found,Python,Path,File Not Found,我的Python应用程序包含一个名为Tests的子文件夹,我用它来运行单元测试。我的所有文件都在父文件夹中,我将称之为App。Tests文件夹包含一个test.py文件。App文件夹包含App.py文件和file.txt文本文件 在我的test.py文件中,我可以这样导入: import sys sys.path.append("PATH_TO_PARENT_DIR") 假设my app.py文件包含以下内容: class Stuff(): def do_stuff():

我的Python应用程序包含一个名为Tests的子文件夹,我用它来运行单元测试。我的所有文件都在父文件夹中,我将称之为App。Tests文件夹包含一个test.py文件。App文件夹包含App.py文件和file.txt文本文件

在我的test.py文件中,我可以这样导入:

import sys
sys.path.append("PATH_TO_PARENT_DIR")
假设my app.py文件包含以下内容:

class Stuff():
    def do_stuff():
        with open("file.txt") as f:
            pass
现在,如果运行test.py,则会出现以下错误:

FileNotFoundError: [Errno 2] No such file or directory: 'file.txt'

我怎样才能解决这个问题?非常感谢

函数
open
在调用
open
函数的脚本所在的文件夹中查找文件。因此,您的
test.py
将显示在tests文件夹中,而不是app文件夹中。您需要将完整路径添加到文件中

open('app_folder' + 'text.txt')

或者将
test.py
文件移动到与
text.txt

相同的文件夹中,假设该文件与脚本位于相同的文件夹中:

import os
parent_dir = os.path.abspath(os.path.dirname(__file__))
class Stuff():
    def do_stuff():
        with open(os.path.join(parent_dir, "file.txt")) as f:
            pass
说明:

\uuuu文件\uuuu
是脚本的路径

os.path.dirname
get是脚本所在的目录

os.path.abspath
将该路径设置为绝对路径而不是相对路径(以防相对路径弄乱脚本,这是一个很好的做法)

然后,我们所需要做的就是将您的
父目录
与该文件相结合,我们使用
os.path.join
来实现这一点

阅读
os.path
方法上的文档:

如果有帮助,可以这样编写此代码的更明确版本:

import os
script_path = __file__
parent_dir = os.path.dirname(script_path)
parent_dir_absolute = os.path.abspath(parent_dir)
path_to_txt = os.path.join(parent_dir_absolute, 'file.txt')

给出文本文件的完整路径…例如:C//user/full\u path//file。txt@sachindubey为什么相对路径不起作用?对不起,我有点累了。我只是理解了这个评论。你说的“给出完整的路径”是什么意思?我是否必须手动将其添加到路径,类似于将路径添加到父文件夹?谢谢。你能不能给我一个不显式给出父文件夹路径的方法?我的意思是使用sys函数。我也需要在生产环境中使用它,开始定义显式路径听起来不是一个好主意。您可以使用
os.path.join(path,file)
,但事实是,您必须以某种方式定义文件所在的文件夹。如果它是父文件夹,您可以使用
作为路径,但最好的方法是在配置文件中定义该路径,并创建一个函数来包装
打开
,多亏了,我使用了在其他地方找到的以下解决方案:
MAIN\u DIR=os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))