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局域网ip扫描示例分享
Apr 03 Python
探索Python3.4中新引入的asyncio模块
Apr 08 Python
Python中使用ElementTree解析XML示例
Jun 02 Python
python根据日期返回星期几的方法
Jul 06 Python
python利用正则表达式提取字符串
Dec 08 Python
django输出html内容的实例
May 27 Python
Python QQBot库的QQ聊天机器人
Jun 19 Python
Python下opencv图像阈值处理的使用笔记
Aug 04 Python
解决python3 requests headers参数不能有中文的问题
Aug 21 Python
Python定时任务APScheduler原理及实例解析
May 30 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
浅谈django不使用restframework自定义接口与使用的区别
Jul 15 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实现小型站点广告管理
2006/10/09 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
2010/05/18 PHP
PHP学习之正则表达式
2011/04/17 PHP
PHP中使用SimpleXML检查XML文件结构实例
2015/01/07 PHP
php表单加入Token防止重复提交的方法分析
2016/10/10 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
页面中js执行顺序
2009/11/09 Javascript
详谈 Jquery Ajax异步处理Json数据.
2011/09/09 Javascript
jQuery当鼠标悬停时放大图片的效果实例
2013/07/03 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
Bootstrap入门书籍之(四)菜单、按钮及导航
2016/02/17 Javascript
js实现5秒倒计时重新发送短信功能
2017/02/05 Javascript
vue过渡和animate.css结合使用详解
2017/06/14 Javascript
js实现上传并压缩图片效果
2018/01/10 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
详解Vue中watch对象内属性的方法
2019/02/01 Javascript
什么时候不能在 Node.js 中使用 Lock Files
2019/06/24 Javascript
基于jsbarcode 生成条形码并将生成的条码保存至本地+源码
2020/04/27 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
JS如何操作DOM基于表格动态展示数据
2020/10/15 Javascript
在Vue中使用Viser说明(基于AntV-G2可视化引擎)
2020/10/28 Javascript
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
Python pymongo模块用法示例
2018/03/31 Python
pandas 取出表中一列数据所有的值并转换为array类型的方法
2018/04/11 Python
Python求离散序列导数的示例
2019/07/10 Python
Django文件存储 自己定制存储系统解析
2019/08/02 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
CSS3旋转——彩色扇子兼容firefox浏览器
2013/06/04 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
如何写毕业求职自荐信
2013/11/06 职场文书
妈妈活动方案
2014/08/15 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang
压缩Redis里的字符串大对象操作
2021/06/23 Redis