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实现的生成自我描述脚本分享(很有意思的程序)
Jul 18 Python
Python抓取百度查询结果的方法
Jul 08 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
python设置随机种子实例讲解
Sep 12 Python
在python中计算ssim的方法(与Matlab结果一致)
Dec 19 Python
python IDLE添加行号显示教程
Apr 25 Python
Python新手学习函数默认参数设置
Jun 03 Python
Python嵌入C/C++进行开发详解
Jun 09 Python
Python 里最强的地图绘制神器
Mar 01 Python
Python制作一个随机抽奖小工具的实现
Jul 07 Python
python中的3种定义类方法
Nov 27 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与javascript的两种交互方式
2006/10/09 PHP
PHP页面间传递参数实例代码
2008/06/05 PHP
PHP服务器页面间跳转实现方法
2012/08/02 PHP
解析使用substr截取UTF-8中文字符串出现乱码的问题
2013/06/20 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
判断脚本加载是否完成的方法
2009/05/26 Javascript
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
JavaScript Event学习第二章 Event浏览器兼容性
2010/02/07 Javascript
基于JavaScript 声明全局变量的三种方式详解
2013/05/07 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
详解微信小程序 页面跳转 传递参数
2016/12/08 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
从零开始做一个pagination分页组件
2017/03/15 Javascript
Angular2+国际化方案(ngx-translate)的示例代码
2017/08/23 Javascript
详解如何在vue项目中使用lodop打印插件
2018/09/27 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
JavaScript console的使用方法实例分析
2020/04/28 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
JS模拟实现京东快递单号查询
2020/11/30 Javascript
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
Python中的choice()方法使用详解
2015/05/15 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
利用Python开发实现简单的记事本
2016/11/15 Python
Python操作SQLite数据库的方法详解【导入,创建,游标,增删改查等】
2017/07/11 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
pygame游戏之旅 添加游戏界面按键图形
2018/11/20 Python
Python2和Python3中urllib库中urlencode的使用注意事项
2018/11/26 Python
python实现对象列表根据某个属性排序的方法详解
2019/06/11 Python
Python实现小黑屋游戏的完整实例
2021/01/06 Python
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
神话般的珠宝:Ross-Simons
2020/07/13 全球购物
2014年妇幼保健工作总结
2014/12/08 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python
服务器SVN搭建图文安装过程
2022/06/21 Servers