如果你取相对路径不是在主文件里,可能就会有相对路径问题:"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代码中使用相对路径时会存在以下问题,示例代码结构如下:
其中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"就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍解决vue单页面应用打包后相对路径、绝对路径相关问题,包括了解决vue单页面应用打包后相对路径、绝对路径相关问题的使用技巧和注意事项,需要的朋友参考一下 在项目开发过程中,在部署过程中,用到了反向代理,这就要求前端代码中不能使用绝对路径。但是我们知道,一般情况下,通过webpack+vuecli默认打包后的HTML、css、js等文件,使用的都是绝对路径。下面可以举几个例子来看一下:
问题内容: 我正在python 2.7中开发自己的模块。它位于而不是或中。内部结构为: 包括课程。我遇到导入问题: 我没有将PythonPath设置为包括我的,因此,当server.http尝试包含client.PyCachedClient时,它将尝试从相对路径加载它并失败。我的问题是- 我应该如何以良好的pythonic方式设置所有路径/设置?我知道每次打开控制台并尝试运行服务器时都可以在she
问题内容: 所以这是我的程序,可以正常工作: 如您所见,我正在使用我要读取的文件的绝对路径: 当我尝试使用相对路径时会出现问题: 我收到一个错误: 文件usnumbers.txt与ScanSum.class文件位于同一目录中: 我该如何解决? 问题答案: 从哪个目录执行该类文件?(这将是相对路径的当前工作目录和基本目录。) 如果仅从eclipse启动应用程序,则项目目录将是工作目录,在这种情况下,
主要内容:什么是当前工作目录,什么是绝对路径与相对路径,Python处理绝对路径和相对路径在介绍绝对路径和相对路径之前,先要了解一下什么是当前工作目录。 什么是当前工作目录 每个运行在计算机上的程序,都有一个“当前工作目录”(或 cwd)。所有没有从根文件夹开始的文件名或路径,都假定在当前工作目录下。 注意,虽然文件夹是目录的更新的名称,但当前工作目录(或当前目录)是标准术语,没有当前工作文件夹这种说法。 在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字
本文向大家介绍nodejs的路径问题的解决,包括了nodejs的路径问题的解决的使用技巧和注意事项,需要的朋友参考一下 最近公司的一个开发项目,后端用的是nodejs。这两天需要打包给客户演示,就让公司一个小伙把之前3D机房的打包工具移植过来。打包之后,发现原本在开发环境下的跑的好好的项目,不能访问了。出现项目的首页不能访问的问题: can not get file index.html expr
本文向大家介绍vue webpack build资源相对路径的问题及解决方法,包括了vue webpack build资源相对路径的问题及解决方法的使用技巧和注意事项,需要的朋友参考一下 默认情况webpack+vue-cli打包的css、js等静态资源路径都是绝对的,即static在根目录下,如果部署到带有文件夹目录的项目中,资源路径就会出错。 如图: 解决方法: 在webpack.prod.c
问题内容: 我正在运行Mac OS X环境,习惯于使用〜/提供对当前用户目录的访问。 例如,在我的python脚本中,我只是尝试使用 但是想用 尝试运行此文件或目录时出现错误消息。有任何想法吗? 问题答案: 您需要使用 正在当前工作目录中寻找名为“〜”的目录。 还请注意该函数的文档-特别是,您需要正确设置环境变量以确保进行扩展。在大多数情况下,这不会成为问题,但是如果不进行扩展,那可能就是原因。
问题内容: 我将Maven约定用于源路径(src / main src / test),并且我的sql脚本位于src / main / resources / scripts中。 我想用H2内存运行我的应用程序,我想使用jdbc url初始化我的数据库: 我的问题是,这个相对路径(src / main / …)不起作用,并且如果init = runscript命令什么都没有针对,则H2不会崩溃。