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中如何使用朴素贝叶斯算法
Apr 06 Python
多个应用共存的Django配置方法
May 30 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
对python 合并 累加两个dict的实例详解
Jan 21 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
python中利用matplotlib读取灰度图的例子
Dec 07 Python
pytorch masked_fill报错的解决
Feb 18 Python
Python实现对adb命令封装
Mar 06 Python
Python数据可视化实现多种图例代码详解
Jul 14 Python
Django一小时写出账号密码管理系统
Apr 29 Python
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
Mar 03 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 cookie工作原理与实例详解
2016/07/18 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
JavaScript可否多线程? 深入理解JavaScript定时机制
2012/05/23 Javascript
利用jQuery简单实现产品展示图片左右滚动功能(示例代码)
2014/01/02 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
弹出遮罩层后禁止滚动效果【实现代码】
2016/04/29 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
详解Layer弹出层样式
2017/08/21 Javascript
js 发布订阅模式的实例讲解
2017/09/10 Javascript
AngularJS实现注册表单验证功能
2017/10/16 Javascript
Vue.js用法详解
2017/11/13 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
JavaScript中clientWidth,offsetWidth,scrollWidth的区别
2021/01/25 Javascript
Python中的闭包总结
2014/09/18 Python
浅析Python中将单词首字母大写的capitalize()方法
2015/05/18 Python
python 3.6.2 安装配置方法图文教程
2018/09/18 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
基于python中__add__函数的用法
2019/11/25 Python
django3.02模板中的超链接配置实例代码
2020/02/04 Python
python中JWT用户认证的实现
2020/05/18 Python
一篇.NET面试题
2014/09/29 面试题
本科生详细的自我评价
2013/09/19 职场文书
工程造价专业大专生求职信
2013/10/06 职场文书
《独坐敬亭山》教学反思
2014/04/08 职场文书
绿色环保演讲稿
2014/05/10 职场文书
十月围城观后感
2015/06/08 职场文书
首次购房证明
2015/06/19 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
护士岗位竞聘书
2015/09/15 职场文书
2019年幼儿园家长接送责任书
2019/10/29 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript