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中Django 后台自定义表单控件
Mar 28 Python
Python实现PS图像调整之对比度调整功能示例
Jan 26 Python
pandas Dataframe行列读取的实例
Jun 08 Python
python3实现zabbix告警推送钉钉的示例
Feb 20 Python
8种用Python实现线性回归的方法对比详解
Jul 10 Python
nginx黑名单和django限速,最简单的防恶意请求方法分享
Aug 09 Python
如何使用python代码操作git代码
Feb 29 Python
django queryset 去重 .distinct()说明
May 19 Python
Python3.9新特性详解
Oct 10 Python
python中_del_还原数据的方法
Dec 09 Python
python 利用matplotlib在3D空间中绘制平面的案例
Feb 06 Python
python实现高效的遗传算法
Apr 07 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字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php实现文件下载更能介绍
2012/11/23 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
php实现paypal 授权登录
2015/05/28 PHP
php设计模式之委托模式
2016/02/13 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
2015/11/21 Javascript
jQuery插件之jQuery.Form.js用法实例分析(附demo示例源码)
2016/01/04 Javascript
JavaScript+html5 canvas绘制的小人效果
2016/01/27 Javascript
全面了解js中的script标签
2016/07/04 Javascript
微信小程序 利用css实现遮罩效果实例详解
2017/01/21 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
JS实现的倒计时恢复按钮点击功能【可用于协议阅读倒计时】
2018/04/19 Javascript
vue.js 子组件无法获取父组件store值的解决方式
2019/11/08 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
Python命令行参数解析模块optparse使用实例
2015/04/13 Python
python 实现一个贴吧图片爬虫的示例
2017/10/12 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
2019/02/21 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
Python列表如何更新值
2020/05/27 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
澳大利亚时尚前卫设计师珠宝在线:Amber Sceats
2017/10/04 全球购物
美国滑雪和滑雪板商店:Buckman
2018/03/03 全球购物
护理专科毕业推荐信
2013/11/10 职场文书
旅游专业职业生涯规划范文
2014/01/13 职场文书
入党自我评价优缺点
2014/01/25 职场文书
教师自我反思材料
2014/02/14 职场文书
我爱祖国演讲稿
2014/09/02 职场文书
go web 预防跨站脚本的实现方式
2021/06/11 Golang
alibaba seata服务端具体实现
2022/02/24 Java/Android
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫