我的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'
我该如何解决?非常感谢!
答案 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')