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()
    
  • 相关阅读:
    Go语言开发Windows应用
    go 调用windows dll 的方法
    thinkPHP5 命名空间别名
    thinkPHP5 类库包注册
    thinkphp5 默认配置代码
    edusoho twig 引入文件功能
    edusoho 查找网址对应的控制器和模板页面
    启动Nginx 出现 nginx: [emerg] unknown directive "锘?user" 错误
    eduSOHO 首页模板 全部课程模块代码
    twig 模板控制器对应列表
  • 原文地址:https://www.cnblogs.com/wztshine/p/14495924.html
Copyright © 2011-2022 走看看