zoukankan      html  css  js  c++  java
  • 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:UserswztshineDesktopa.py", line 3, in <module>
        reader()
      File "C:UserswztshineDesktopaa
    ead.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()
    
  • 相关阅读:
    JSDoc使用指南
    听创始人讲Quora为什么选择Python
    Bootstrap model模态框与百度地图API发生冲突时的解决办法
    使用百度地图API制作线路轨迹播放
    EF+Mysql+DDD框架搭建(一)——code first准备
    RowNumber()分页方法
    设计模式六大原则
    温习.net基础知识(二)装箱和拆箱
    温习.net基础知识(一)基础知识点
    c# 跨域api
  • 原文地址:https://www.cnblogs.com/wztshine/p/14495924.html
Copyright © 2011-2022 走看看