Python解决相对路径问题:Nosuchfileordirectory
如果你取相对路径不是在主⽂件⾥,可能就会有相对路径问题:"No such file or directory"。
因为 python 的相对路径,相对的都是主⽂件。
如下⽬录结构:
| -- main.py
| -- conf.py
| -- start.png
| --
main.py 是主⽂件。
conf.py ⾥引⽤ ⽤相对路径。
如果⽤ . 或 … 相对的是 main.py,所以⽤ "./",相对于 main.py 是同⼀个⽬录下。
.
指当前⽂件所在的⽂件夹,… 指当前⽂件的上⼀级⽬录。
补充知识:解决python模块调⽤时代码中使⽤相对路径访问的⽂件,提⽰⽂件不存在的问题
问题分析:
在编码过程中使⽤相对路径使代码的稳定性更好,即使项⽬⽬录发⽣变更,只要⽂件相对路径不变,代码依然可以稳定运⾏。但是在python代码中使⽤相对路径时会存在以下问题,⽰例代码结构如下:
其中test包中包含两个⽂件first.py和,first.py代码中只有⼀个函数read_file,⽤于读取⽂件第⼀⾏的内容,并打印结果,读取⽂件使⽤相对路径,代码如下:
import os
print("当前路径 -> %s" %os.getcwd())
def read_file() :
with open("" , encoding = 'utf-8') as f_obj :
content = adline()
print("⽂件内容 -> %s" %content)
if __name__ == '__main__' :
read_file()
first.py程序代码执⾏结果如下:
当前路径 -> E:\程序\python代码\PythonDataAnalysis\Demo\test
⽂件内容 -> hello python
与test在同⼀⽬录下存在⼀个second.py⽂件,在这个⽂件中调⽤first.py⽂件中的read_file⽅法读取⽂件,代码如下:
from test import first
second.py程序执⾏结果如下:
当前路径 -> E:\程序\python代码\PythonDataAnalysis\Demo
File "E:/程序/python代码/PythonDataAnalysis/Demo/second.py", line 8, in <module>
File "E:\程序\python代码\PythonDataAnalysis\Demo\test\first.py", line 10, in read_file
with open("" , encoding = 'utf-8') as f_obj :
FileNotFoundError: [Errno 2] No such fileor directory: ''
以上信息提⽰ ⽂件不存在,查看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 + "/" , encoding = 'utf-8') as f_obj :
content = adline()
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代码执⾏结果如下:
python怎么读取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 和 组成的⽂件绝对路径则是固定的,这样就可以确保在进⾏模块导⼊时,模块中使⽤相对路径进⾏访问的⽂件不会出错。
以上这篇Python 解决相对路径问题:"No such file or directory"就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。