Python 解决相对路径问题:"No such file or directory"


Posted in Python onJune 05, 2020

如果你取相对路径不是在主文件里,可能就会有相对路径问题:"No such file or directory"。

因为 python 的相对路径,相对的都是主文件。

如下目录结构:

| -- main.py
   | -- conf.py
   | -- start.png
| -- config.txt

main.py 是主文件。

conf.py 里引用 config.txt 用相对路径。

如果用 . 或 … 相对的是 main.py,所以用 "./config.txt",相对于 main.py 是同一个目录下。

.指当前文件所在的文件夹,… 指当前文件的上一级目录。

补充知识:解决python模块调用时代码中使用相对路径访问的文件,提示文件不存在的问题

问题分析:

在编码过程中使用相对路径使代码的稳定性更好,即使项目目录发生变更,只要文件相对路径不变,代码依然可以稳定运行。但是在python代码中使用相对路径时会存在以下问题,示例代码结构如下:

Python 解决相对路径问题:"No such file or directory"

其中test包中包含两个文件first.py和user_info.txt,first.py代码中只有一个函数read_file,用于读取user_info.txt文件第一行的内容,并打印结果,读取文件使用相对路径,代码如下:

import os
print("当前路径 -> %s" %os.getcwd())
def read_file() :
  with open("user_info.txt" , encoding = 'utf-8') as f_obj :
    content = f_obj.readline()
    print("文件内容 -> %s" %content)
 
if __name__ == '__main__' :
  read_file()

first.py程序代码执行结果如下:

当前路径 -> E:\程序\python代码\PythonDataAnalysis\Demo\test

文件内容 -> hello python !!!

与test在同一目录下存在一个second.py文件,在这个文件中调用first.py文件中的read_file方法读取user_info.txt文件,代码如下:

from test import first

first.read_file()

second.py程序执行结果如下:

当前路径 -> E:\程序\python代码\PythonDataAnalysis\Demo

File "E:/程序/python代码/PythonDataAnalysis/Demo/second.py", line 8, in <module>

first.read_file()

File "E:\程序\python代码\PythonDataAnalysis\Demo\test\first.py", line 10, in read_file

with open("user_info.txt" , encoding = 'utf-8') as f_obj :

FileNotFoundError: [Errno 2] No such fileor directory: 'user_info.txt'

以上信息提示user_info.txt 文件不存在,查看os.getcwd() 函数输出的当前路径会发现,当前路径是 XXX/Demo,而不是上一次单独执行first.py 文件时的 XXX/Demo/test了,所以程序报错文件不存在的根本原因是因为当前路径变了,导致代码中的由相对路径构成的绝对路径发生了变化。

解决方法:

对于这种问题,只需要在使用相对路径进行文件访问的模块中加入以下代码即可(加粗内容),修改后的first.py代码如下:

import os
print("当前路径 -> %s" %os.getcwd())
current_path = os.path.dirname(__file__)
def read_file() :
  with open(current_path + "/user_info.txt" , encoding = 'utf-8') as f_obj :
    content = f_obj.readline()
    print("文件内容 -> %s" %content)
 
if __name__ == '__main__' :
  read_file()

first.py 程序执行结果如下:

当前路径 -> E:\程序\python代码\PythonDataAnalysis\Demo\test

current_path -> E:/程序/python代码/PythonDataAnalysis/Demo/test

文件内容 -> hello python !!!

second.py代码不变,second.py代码执行结果如下:

当前路径 -> E:\程序\python代码\PythonDataAnalysis\Demo

current_path -> E:\程序\python代码\PythonDataAnalysis\Demo\test

文件内容 -> hello python !!!

由以上执行结果可以发现,虽然first.py和second.py代码执行时os.getcwd()函数的输出结果还是不一致,但是current_path = os.path.dirname(__file__)

代码得到的current_path路径是相同的,current_path就是first.py文件所处的路径,然后再由current_path 和user_info.txt 组成的文件绝对路径则是固定的,这样就可以确保在进行模块导入时,模块中使用相对路径进行访问的文件不会出错。

以上这篇Python 解决相对路径问题:"No such file or directory"就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
简单文件操作python 修改文件指定行的方法
May 15 Python
详解python的webrtc库实现语音端点检测
May 31 Python
python实现机器人行走效果
Jan 29 Python
Python元组常见操作示例
Feb 19 Python
python flask解析json数据不完整的解决方法
May 26 Python
Django缓存系统实现过程解析
Aug 02 Python
Python 操作 ElasticSearch的完整代码
Aug 04 Python
Python分类测试代码实例汇总
Jul 23 Python
python em算法的实现
Oct 03 Python
python绘制雷达图实例讲解
Jan 03 Python
python办公自动化之excel的操作
May 23 Python
Python 详解通过Scrapy框架实现爬取百度新冠疫情数据流程
Nov 11 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 #Python
Python参数传递及收集机制原理解析
Jun 05 #Python
python如何进行矩阵运算
Jun 05 #Python
Opencv求取连通区域重心实例
Jun 04 #Python
Python中zip函数如何使用
Jun 04 #Python
Python中有几个关键字
Jun 04 #Python
Python如何转换字符串大小写
Jun 04 #Python
You might like
php下用GD生成生成缩略图的两个选择和区别
2007/04/17 PHP
如何用php获取程序执行的时间
2013/06/09 PHP
php实现上传图片生成缩略图示例
2014/04/13 PHP
PHP实现清除wordpress里恶意代码
2015/10/21 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
广告切换效果(缓动切换)
2009/05/27 Javascript
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
JavaScript获取图片真实大小代码实例
2014/09/24 Javascript
JS和css实现检测移动设备方向的变化并判断横竖屏幕
2015/05/25 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
jQuery实现在HTML文档加载完毕后自动执行某个事件的方法
2017/05/08 jQuery
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
nodejs微信扫码支付功能实现
2018/02/17 NodeJs
原生js实现瀑布流效果
2020/03/09 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
Vue实现开关按钮拖拽效果
2020/09/22 Javascript
[44:26]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第二局
2016/03/03 DOTA
[03:46]DAC趣味视频-中文考试.mp4
2017/04/02 DOTA
[20:30]职业巡回赛回顾
2018/08/09 DOTA
python中的__slots__使用示例
2015/02/26 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
django 中的聚合函数,分组函数,F 查询,Q查询
2019/07/25 Python
python SocketServer源码深入解读
2019/09/17 Python
Python图像处理库PIL的ImageGrab模块介绍详解
2020/02/26 Python
python实现电子词典
2020/03/03 Python
浅谈Python中的继承
2020/06/19 Python
Python 中如何写注释
2020/08/28 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
大学生村官心得体会范文
2014/01/04 职场文书
艺术学院毕业生自我评价
2014/03/02 职场文书
外贸业务员求职信
2014/06/16 职场文书
副乡长群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书