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编程开发之日期操作实例分析
Nov 13 Python
Python使用QRCode模块生成二维码实例详解
Jun 14 Python
在Python的一段程序中如何使用多次事件循环详解
Sep 07 Python
Python实现一个Git日志统计分析的小工具
Dec 14 Python
Python操作MongoDB数据库的方法示例
Jan 04 Python
django中静态文件配置static的方法
May 20 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
解决pycharm最左侧Tool Buttons显示不全的问题
Dec 17 Python
python与mysql数据库交互的实现
Jan 06 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
详解Python中的进程和线程
Jun 23 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
thinkPHP中钩子的两种配置调用方法详解
2016/11/11 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
JS类中定义原型方法的两种实现的区别
2007/03/08 Javascript
JavaScript 高效运行代码分析
2010/03/18 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
用console.table()调试javascript
2014/09/04 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
基于javascript实现泡泡大冒险网页版小游戏
2016/03/23 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
Angular2库初探
2017/03/01 Javascript
详解vue项目构建与实战
2017/06/27 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
three.js实现3D影院的原理的代码分析
2017/12/18 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
微信小程序实现授权登录
2019/05/15 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
python中星号变量的几种特殊用法
2016/09/07 Python
Python 数据结构之旋转链表
2017/02/25 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
python实现把二维列表变为一维列表的方法分析
2019/10/08 Python
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
傲盾软件面试题
2015/08/17 面试题
师范生个人推荐信
2013/11/29 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
经济管理专业求职信
2014/06/09 职场文书
英语系毕业生求职信
2014/07/13 职场文书
小学生推普周国旗下讲话稿
2014/09/21 职场文书
2014年创先争优工作总结
2014/12/11 职场文书
股份转让协议书范本
2015/01/27 职场文书
教师年终个人总结
2015/02/11 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书