Python 父文件夹脚本FileNotFoundError
我的Python应用程序包含一个名为Tests的子文件夹,我用它来运行单元测试。我的所有文件都在父文件夹中,我将称之为App。Tests文件夹包含一个test.py文件。App文件夹包含App.py文件和file.txt文本文件 在我的test.py文件中,我可以这样导入: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():
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()))