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())
我用的是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())