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中的super()方法使用简介
Aug 14 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
Sep 19 Python
Python3和pyqt5实现控件数据动态显示方式
Dec 13 Python
在Pytorch中计算自己模型的FLOPs方式
Dec 30 Python
mac使用python识别图形验证码功能
Jan 10 Python
tensorflow实现训练变量checkpoint的保存与读取
Feb 10 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
Python操控mysql批量插入数据的实现方法
Oct 27 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
Python jieba库分词模式实例用法
Jan 13 Python
教你漂亮打印Pandas DataFrames和Series
May 29 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 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
ThinkPHP实现转换数据库查询结果数据到对应类型的方法
2017/11/16 PHP
Thinkphp 框架扩展之标签库驱动原理与用法分析
2020/04/23 PHP
JavaScript事件列表解说
2006/12/22 Javascript
javascript &amp;&amp;和||运算法的另类使用技巧
2009/11/28 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
Javascript之旅 对象的原型链之由来
2010/08/25 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
ES6新特性之类(Class)和继承(Extends)相关概念与用法分析
2017/05/24 Javascript
js实现按钮开关单机下拉菜单效果
2018/11/22 Javascript
Vue如何循环提取对象数组中的值
2020/11/18 Vue.js
零基础学Python(一)Python环境安装
2014/08/20 Python
DJANGO-ALLAUTH社交用户系统的安装配置
2014/11/18 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
Python Numpy 实现交换两行和两列的方法
2019/06/26 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
2020/02/29 Python
Python matplotlib画图时图例说明(legend)放到图像外侧详解
2020/05/16 Python
Django Form设置文本框为readonly操作
2020/07/03 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
Kangol帽子官网:坎戈尔袋鼠
2018/09/26 全球购物
澳大利亚在线家具店:Luxo Living
2019/03/24 全球购物
土耳其新趋势女装购物网站:Addax
2020/01/07 全球购物
金融专业推荐信
2013/11/14 职场文书
数学教育专业求职信
2014/07/22 职场文书
mysql查看表结构的三种方法总结
2022/07/07 MySQL