父文件夹脚本FileNotFoundError

时间:2018-07-23 08:52:41

标签: 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")

说我的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'

我该如何解决?非常感谢!

2 个答案:

答案 0 :(得分:1)

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

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

或将test.py文件移至与text.txt相同的文件夹中

答案 1 :(得分:1)

假设文件与脚本位于同一文件夹中

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

说明:

__file__是脚本的路径

os.path.dirname获取脚本所在的目录

os.path.abspath将该路径设置为绝对路径,而不是相对路径(以防万一相对路径将脚本弄乱了,这是一个好习惯)

然后我们要做的就是将您的parent_dir与文件合并在一起,我们使用os.path.join进行。

https://docs.python.org/3/library/os.path.html

上阅读有关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')
相关问题