【问题标题】:Python import module from directory, error reading filePython 从目录导入模块,读取文件出错
【发布时间】:2020-04-18 12:25:35
【问题描述】:

我使用的是 python 3.7

这是我的项目文件结构

.
├── aa
│   ├── reader.py
│   └── readme.txt
└── m.py

1 directory, 3 files

在 m.py 文件中:

import aa.reader as reader    
reader.read_file()

在 reader.py 文件中:

def read_file():
    with open('readme.txt', 'r') as f:
        d = f.read()
    return d


if __name__ == '__main__':
    print(read_file())

在 readme.txt 文件中:

this is the content of readme

当我运行 m.py 文件时,我得到了这个错误:

ranick@r-ubt:~/Desktop/kk$ python m.py 
Traceback (most recent call last):
  File "m.py", line 4, in <module>
    reader.read_file()
  File "/home/ranick/Desktop/kk/aa/reader.py", line 3, in read_file
    with open('readme.txt', 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: 'readme.txt'

如何解决这个错误?

【问题讨论】:

    标签: python python-3.x import module python-3.6


    【解决方案1】:

    当您在 Python 中使用文件的相对路径时,该路径相对于当前工作目录 (cwd),而不是文件的当前位置。

    当前工作目录是您启动脚本的路径。在您的情况下,cwd 是一个包含脚本 m.py 的文件夹。

    您需要将路径更改为readme.txt。一个可靠的选项是获取脚本reader.py 的路径并使用它来确定文件readme.txt 的路径。您可以使用模块属性__file__ 获取模块的完整文件路径,然后提取目录名称。

    新的 reader.py

    import os
    
    def read_file():
        readme_path = os.path.join(os.path.dirname(__file__), 'readme.txt')
    
        with open(readme_path , 'r') as f:
            d = f.read()
    
        return d
    
    
    if __name__ == '__main__':
        print(read_file())
    

    【讨论】:

      【解决方案2】:

      相对于您调用入口文件python m.py 的路径来解析文件路径。

      要解决此问题,您可以使用readme.txt 的绝对路径或将'readme.txt' 更改为'aa/readme.txt'

      要找出您的相对路径结束应用于哪个绝对路径,您可以从reader.py 执行以下操作:

      import os
      print(os.getcwd())
      

      【讨论】:

        猜你喜欢
        • 2019-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 2022-11-04
        • 2014-08-28
        • 2021-03-07
        • 1970-01-01
        相关资源
        最近更新 更多