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入门篇之列表和元组
Oct 17 Python
Python通过递归遍历出集合中所有元素的方法
Feb 25 Python
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
Mar 31 Python
Python字典数据对象拆分的简单实现方法
Dec 05 Python
python中ASCII码和字符的转换方法
Jul 09 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
python程序控制NAO机器人行走
Apr 29 Python
PyQt5 如何让界面和逻辑分离的方法
Mar 24 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
python爬虫把url链接编码成gbk2312格式过程解析
Jun 08 Python
python语音识别指南终极版(有这一篇足矣)
Sep 09 Python
python如何实时获取tcpdump输出
Sep 16 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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
2008/06/07 PHP
php中二分法查找算法实例分析
2016/09/22 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
Laravel实现ORM带条件搜索分页
2019/10/24 PHP
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
判断某个字符在一个字符串中是否存在的js代码
2014/02/28 Javascript
js Object2String方便查看js对象内容
2014/11/24 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
2015/02/28 Javascript
jQuery菜单插件superfish使用指南
2015/04/21 Javascript
Node.js静态文件服务器改进版
2016/01/10 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
VUE axios上传图片到七牛的实例代码
2017/07/28 Javascript
iframe与主框架跨域相互访问实现方法
2017/09/14 Javascript
封装微信小程序http拦截器过程解析
2019/08/13 Javascript
vue 返回上一页,页面样式错乱的解决
2019/11/14 Javascript
python使用urlparse分析网址中域名的方法
2015/04/15 Python
python-opencv颜色提取分割方法
2018/12/08 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
如何基于线程池提升request模块效率
2020/04/18 Python
Python实现进度条和时间预估的示例代码
2020/06/02 Python
python SOCKET编程基础入门
2021/02/27 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
HTML5中的autofocus(自动聚焦)属性介绍
2014/04/23 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
小学毕业家长寄语
2014/01/19 职场文书
大学信息公开实施方案
2014/03/09 职场文书
感恩之星事迹材料
2014/05/03 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
优秀党员先进事迹材料
2014/12/18 职场文书
网络营销计划
2015/01/17 职场文书
2015年安全生产月活动总结
2015/03/26 职场文书
运动会通讯稿200字
2015/07/20 职场文书
员工考勤管理制度
2015/08/06 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书