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 25 Python
Python中apply函数的用法实例教程
Jul 31 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
python3.7 利用函数os pandas利用excel对文件名进行归类
Sep 29 Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 Python
Python figure参数及subplot子图绘制代码
Apr 18 Python
Eclipse配置python默认头过程图解
Apr 26 Python
python3中确保枚举值代码分析
Dec 02 Python
解决python3安装pandas出错的问题
May 20 Python
详解python字符串驻留技术
May 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中常见的缓存技术实例分析
2015/09/23 PHP
PHP去掉json字符串中的反斜杠\及去掉双引号前的反斜杠
2015/09/30 PHP
php头像上传预览实例代码
2017/05/02 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
Windows系统下Node.js的简单入门教程
2015/06/23 Javascript
JavaScript仿支付宝密码输入框
2015/12/29 Javascript
Node.js的MongoDB驱动Mongoose基本使用教程
2016/03/01 Javascript
js基于cookie方式记住返回页面用法示例
2016/05/27 Javascript
Bootstrap表单布局样式源代码
2016/07/04 Javascript
谈谈JavaScript中的几种借用方法
2016/08/09 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
微信小程序获取复选框全选反选选中的值(实例代码)
2019/12/17 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
详解Python中的多线程编程
2015/04/09 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
Python编程二分法实现冒泡算法+快速排序代码示例
2018/01/15 Python
python实现俄罗斯方块游戏
2020/03/25 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
大学生毕业求职找工作的自我评价
2013/09/29 职场文书
高级销售员求职信
2013/10/25 职场文书
公司薪酬管理制度
2014/01/31 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
公司领导班子民主生活会对照检查材料
2014/10/02 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
情人节活动总结范文
2015/02/05 职场文书
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
MySQL GTID复制的具体使用
2022/05/20 MySQL
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript