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  连接字符串(join %)
Sep 06 Python
python在命令行下使用google翻译(带语音)
Jan 16 Python
从零学Python之入门(四)运算
May 27 Python
Python正规则表达式学习指南
Aug 02 Python
python学习之matplotlib绘制散点图实例
Dec 09 Python
python保存文件方法小结
Jul 27 Python
Python操作json的方法实例分析
Dec 06 Python
Python函数装饰器原理与用法详解
Aug 16 Python
Python Django2.0集成Celery4.1教程
Nov 19 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
详解Python中下划线的5种含义
Jul 15 Python
python+opencv实现目标跟踪过程
Jun 21 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环境套包 dedeampz 伪静态设置示例
2014/03/26 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
自己写的php curl库实现整站克隆功能
2015/02/12 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
JavaScript将Table导出到Excel实现思路及代码
2013/03/13 Javascript
如何创建一个JavaScript弹出DIV窗口层的效果
2013/09/25 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
15款最好的Bootstrap在线编辑器
2016/08/03 Javascript
js捕捉键盘事件和按键键值的方法
2016/10/10 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
Webpack框架核心概念(知识点整理)
2017/12/22 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
promise和co搭配生成器函数方式解决js代码异步流程的比较
2018/05/25 Javascript
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
让python同时兼容python2和python3的8个技巧分享
2014/07/11 Python
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
使用Python写一个贪吃蛇游戏实例代码
2017/08/21 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Python爬虫学习之获取指定网页源码
2019/07/30 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
tensorboard显示空白的解决
2020/02/15 Python
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
Roots加拿大官网:加拿大休闲服饰品牌
2016/10/24 全球购物
护理专业毕业生自我鉴定
2013/10/08 职场文书
大学运动会入场词
2014/02/22 职场文书
2014年大学庆元旦迎新年活动方案
2014/03/09 职场文书
2015年机关后勤工作总结
2015/05/26 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书