Python 从目录导入模块,读取文件时出错

Python import module from directory, error reading file

我用的是python3.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 中文件的相对路径时,路径是相对于当前工作目录 (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())

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

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

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

import os
print(os.getcwd())