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 相关文章推荐
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
Python selenium文件上传方法汇总
Nov 19 Python
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
Python使用base64模块进行二进制数据编码详解
Jan 11 Python
python正则表达式及使用正则表达式的例子
Jan 22 Python
python获取微信企业号打卡数据并生成windows计划任务
Apr 30 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
在服务器上安装python3.8.2环境的教程详解
Apr 26 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Python中random模块常用方法的使用教程
Oct 04 Python
Python读写Excel表格的方法
Mar 02 Python
解决Pytorch半精度浮点型网络训练的问题
May 24 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
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
PHP重定向与伪静态区别
2017/02/19 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
js和jquery批量绑定事件传参数一(新猪猪原创)
2010/06/23 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
jquery实现excel导出的方法
2013/04/04 Javascript
Node.js中创建和管理外部进程详解
2014/08/16 Javascript
基于NodeJS的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
2014/09/26 NodeJs
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
JS中Location使用详解
2015/05/12 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
微信小程序 获取设备信息 API实例详解
2016/10/02 Javascript
bootstrap datetimepicker实现秒钟选择下拉框
2017/01/05 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
JavaScript使用FileReader实现图片上传预览效果
2020/03/27 Javascript
基于jQuery选择器之表单对象属性筛选选择器的实例
2017/09/19 jQuery
JS实现div模块的截图并下载功能
2017/10/17 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
zepto.js 实时监听输入框的方法
2018/12/04 Javascript
vue实现图片预览组件封装与使用
2019/07/13 Javascript
python查找第k小元素代码分享
2013/12/18 Python
python爬虫爬取网页表格数据
2018/03/07 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
python使用turtle绘制分形树
2018/06/22 Python
对Python之gzip文件读写的方法详解
2019/02/08 Python
Python目录和文件处理总结详解
2019/09/02 Python
python实现银行实战系统
2020/02/26 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
CSS3打造磨砂玻璃背景效果
2016/09/28 HTML / CSS
PHP面试题附答案
2015/11/28 面试题
预备党员入党思想汇报
2014/01/04 职场文书
大学生会计职业生涯规划范文
2014/02/28 职场文书
2015年毕业生自我鉴定模板
2014/09/19 职场文书
催款律师函范文
2015/05/27 职场文书
学术研讨会主持词
2015/07/04 职场文书