python 导入的模块使用了相对路径,导致找不到文件错误

直接上实例:

目录结构:

- a				# 文件夹
    - a.py
- b.py
- config.txt

在 文件夹 a 下有个 a.py,它使用相对路径去读取config.txt的一行数据

def reader():
    with open('../config.txt','r') as f:
        line = f.readline()
        print(line)

if __name__ == '__main__':
    reader()

直接运行 a.py , 没问题:

This is first line: hello world!

请按任意键继续. . .

b.py 和 文件夹a 位于同一层路径,在 b.py 中导入了 a.py

from a.read import reader

reader()

运行b.py,报错:提示找不到文件

Traceback (most recent call last):
  File "C:\Users\wztshine\Desktop\a\b.py", line 3, in <module>
    reader()
  File "C:\Users\wztshine\Desktop\a\a\read.py", line 3, in reader
    with open('../config.txt','r') as f:
FileNotFoundError: [Errno 2] No such file or directory: '../config.txt'

报错是因为:运行 b.py 时,此时 python 的路径是 b.py 所在文件夹的路径,而不是你以为的 a.py 所在位置的路径。所以系统会认为你想要在 b.py 的目录的外层目录去找 config.txt,肯定找不到,也就报错了。

解决方法:修改 a.py

import os
path = os.path.dirname(__file__) # 先找到当前文件 a.py 所在的目录
path = os.path.dirname(path)     # 往上倒一层目录,也就是 config.txt 所在的文件夹
path = os.path.join(path,'config.txt') # 拼接文件的路径

def reader():
    with open(path,'r') as f:
        line = f.readline()
        print(line)
if __name__ == '__main__':
    reader()
posted @   wztshine  阅读(5017)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示