[英]Why can't my Python program find my file?
注意:我使用的是 Windows,这个程序也必须在 Mac 上运行。
我正在编写一个需要读取和写入 JSON 文件的 Python 应用程序,我在src/resources.py
中实现了该文件:
import json
def load_json():
with open('saved_data.json', 'rt') as file_in:
stored_text = file_in.read()
stored_json = json.loads(stored_text)
# parse stored_json & return created objects
在程序开始时,它应该从文件中加载数据,但是当我运行main.py
(我通常从中运行程序)时,它给了我一个运行时错误:
File "<project path>\src\resources.py", line 12, in load_json
with open('saved_data.json', 'rt') as file_in:
FileNotFoundError: [Errno 2] No such file or directory: 'saved_data.json'
这是我的文件结构的样子:
project/
main.py
saved_data.json
src/
__init__.py
resources.py
more files...
我尝试将'..\\'
或'../'
添加到文件路径字符串的开头,认为它可能与 resources.py 而不是 main.py 相关,但这也会导致错误。 我现在不确定该怎么做,因为我没有看到任何具体的地方可能会出错。 我很确定文件结构没问题。 我在这里遗漏或误解了什么?
您的问题是关于如何布局项目文件夹的结构。 这对新手来说是一个非常困难的话题。
请记住,在 Python 中有很多可能的方法和样式可以做到这一点。 但是今天查看setuptools
文档,现代且最推荐的样式是所谓的 _ src
-layout。
您的布局仍在进行中,只需要稍作修改。
假设您的项目名称是“ project
”。 这会产生存储库的名称(例如,在 git 服务器上)或项目文件夹的名称。 它也是您的包的名称。 但是包文件夹和项目文件夹是不同的东西。
将您的布局修改为此
project/
saved_data.json
src/
project/
__main__.py
__init__.py
resources.py
more files...
我创建了一个新的子文件夹project/src/project/
这是包文件夹。 main.py
文件被移入其中并重命名为__main__.py
(更多细节)。 这使文件夹project/src/project/
可运行。
__main__.py
的内容可能如下所示
from .ressources import load_json
if __name__ == '__main__':
load_json()
如果您正在像这样(有效地)运行您的程序:
python main.py
...然后...
from os.path import join
with open(join(__file__, '..', 'saved_data.json')) as file_in:
pass # process the file here
因此,您当前的工作目录无关紧要,因为file将是 main.py 的绝对路径
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.