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

2024-03-28 12:56:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用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'

如何修复此错误


Tags: 文件pytxtreadas错误withopen
2条回答

文件路径相对于从中调用条目文件python m.py的路径进行解析

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

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

import os
print(os.getcwd())

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

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

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

New 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())

相关问题 更多 >