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爬虫常用的模块分析
Aug 29 Python
python中利用Future对象回调别的函数示例代码
Sep 07 Python
python 将json数据提取转化为txt的方法
Oct 26 Python
python 定时任务去检测服务器端口是否通的实例
Jan 26 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
Python简易计算器制作方法代码详解
Oct 31 Python
通过python实现windows桌面截图代码实例
Jan 17 Python
python使用Geany编辑器配置方法
Feb 21 Python
Python爬取12306车次信息代码详解
Aug 12 Python
python中子类与父类的关系基础知识点
Feb 02 Python
Python使用DFA算法过滤内容敏感词
Apr 22 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学习之变量的使用
2011/05/29 PHP
基于python发送邮件的乱码问题的解决办法
2013/04/25 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
2013/12/03 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
2017/02/14 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
jQuery解析json格式数据简单实例
2016/01/22 Javascript
javascript事件模型介绍
2016/05/31 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
Vue2.0实现购物车功能
2017/06/05 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
vue 点击按钮实现动态挂载子组件的方法
2018/09/07 Javascript
在vue中更换字体,本地存储字体非引用在线字体库的方法
2018/09/28 Javascript
详解VSCode配置启动Vue项目
2019/05/14 Javascript
[04:47]DOTA2-潍坊风行电子俱乐部探秘
2014/08/08 DOTA
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python 调用c语言函数的方法
2017/09/29 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
Python数据抓取爬虫代理防封IP方法
2018/12/23 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
python str字符串转uuid实例
2020/03/03 Python
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
Belstaff英国官方在线商店:Belstaff.co.uk
2021/02/09 全球购物
高职教师岗位职责
2013/12/24 职场文书
文员的职业生涯规划发展方向
2014/02/08 职场文书
《蒲公英》教学反思
2014/02/28 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
文明班级申报材料
2014/12/24 职场文书
六年级小学生评语
2014/12/26 职场文书
Nginx + consul + upsync 完成动态负载均衡的方法详解
2021/03/31 Servers
Win11如何查看显卡型号 Win11查看显卡型号的方法
2022/08/14 数码科技