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中用字符串调用函数或方法示例代码
Aug 04 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
Python实现修改IE注册表功能示例
May 10 Python
Python通过调用有道翻译api实现翻译功能示例
Jul 19 Python
对python模块中多个类的用法详解
Jan 10 Python
用python求一个数组的和与平均值的实现方法
Jun 29 Python
python 自动轨迹绘制的实例代码
Jul 05 Python
django将数组传递给前台模板的方法
Aug 06 Python
python实现淘宝购物系统
Oct 25 Python
python 实现端口扫描工具
Dec 18 Python
pytorch 实现L2和L1正则化regularization的操作
Mar 03 Python
Python 数据可视化之Matplotlib详解
Nov 02 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网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
PHP 关于访问控制的和运算符优先级介绍
2013/07/08 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
文本加密解密
2006/06/23 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
2010/06/01 Javascript
理解Javascript_06_理解对象的创建过程
2010/10/15 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
热点新闻滚动特效的js代码
2013/08/17 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
jQuery实现带幻灯的tab滑动切换风格菜单代码
2015/08/27 Javascript
JavaScript对HTML DOM使用EventListener进行操作
2015/10/21 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
JS实现多级菜单中当前菜单不随页面跳转样式而发生变化
2017/05/30 Javascript
浅谈sass在vue注意的地方
2017/08/10 Javascript
EasyUI框架 使用Ajax提交注册信息的实现代码
2017/09/27 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
详解webpack的文件监听实现(热更新)
2020/09/11 Javascript
Python 常用string函数详解
2016/05/30 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
解决python3 Pycharm上连接数据库时报错的问题
2018/12/03 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python 使用多属性来进行排序
2019/09/01 Python
python中round函数如何使用
2020/06/19 Python
pycharm如何设置官方中文(如何汉化)
2020/12/29 Python
新秀丽拉杆箱美国官方网站:Samsonite美国
2016/07/25 全球购物
Stutterheim瑞典:瑞典高级外套时装品牌
2019/06/24 全球购物
你常见到的runtime exception
2016/09/05 面试题
本科生详细的自我评价
2013/09/19 职场文书
小学生成长感言
2014/01/30 职场文书
音乐教学随笔感言
2014/02/19 职场文书
班主任评语大全
2014/04/26 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
公共场所卫生管理制度
2015/08/05 职场文书
2016中秋晚会开幕词
2016/03/03 职场文书