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判断字符串编码的简单实现方法(使用chardet)
Jul 01 Python
python的mysqldb安装步骤详解
Aug 14 Python
NetworkX之Prim算法(实例讲解)
Dec 22 Python
老生常谈python中的重载
Nov 11 Python
Python面向对象之类和对象属性的增删改查操作示例
Dec 14 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
Jan 15 Python
将Pytorch模型从CPU转换成GPU的实现方法
Aug 19 Python
Python中最好用的命令行参数解析工具(argparse)
Aug 23 Python
Python 如何优雅的将数字转化为时间格式的方法
Sep 26 Python
Python字典底层实现原理详解
Dec 18 Python
Python函数调用追踪实现代码
Nov 27 Python
Python采集爬取京东商品信息和评论并存入MySQL
Apr 12 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
图书管理程序(二)
2006/10/09 PHP
phpstorm配置Xdebug进行调试PHP教程
2014/12/01 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
总结一些js自定义的函数
2006/08/05 Javascript
Google韩国首页图标动画效果
2007/08/26 Javascript
JQuery的AJAX实现文件下载的小例子
2013/05/15 Javascript
JS中使用Array函数shift和pop创建可忽略参数的例子
2014/05/28 Javascript
js星星评分效果
2014/07/24 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
原生js编写基于面向对象的分页组件
2016/12/05 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
[59:48]LGD vs IG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python的Socket编程过程中实现UDP端口复用的实例分享
2016/03/19 Python
Python的Flask框架中集成CKeditor富文本编辑器的教程
2016/06/13 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
2017/07/17 Python
python 切换root 执行命令的方法
2019/01/19 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
python线程里哪种模块比较适合
2020/08/02 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
CSS3 linear-gradient线性渐变生成加号和减号的方法
2017/11/21 HTML / CSS
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
生态学毕业生自荐信
2013/10/27 职场文书
英文导游欢迎词
2014/01/11 职场文书
求职简历中自我评价
2014/01/28 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
桥梁工程专业求职信
2014/04/21 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
年中了,该如何写好个人述职报告?
2019/07/02 职场文书
CentOS7 minimal 最小化安装网络设置过程
2022/12/24 Servers