FileNotFoundError。 (泡菜)

问题描述 投票:0回答:1

我有一个项目,其中应用程序加载数据并将其保存到子文件夹(它是一个 GUI 编辑器),并且用于加载 pickle 文件和使用数据的脚本给出了错误消息 ->

Traceback (most recent call last):
  File "d:\Projects\PyEngine\TestProject\main.py", line 12, in <module>
    objects = load_data("objects.pkl")
              ^^^^^^^^^^^^^^^^^^^^^^^^
  File "d:\Projects\PyEngine\TestProject\engineFunctions.py", line 12, in load_data
    with open(path, "rb") as file:
         ^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'objects.pkl'

文件结构为->

Workspace Folder
    main.py
    other python files
    Sub Folder
        main.py
        other python files
        objects.pkl

当子文件夹不在工作区文件夹中时,子文件夹 main.py 文件能够正确加载, 如果我在给出路径时还指定了子文件夹名称,它确实有效,但它在工作区文件夹之外不起作用。

这是 MRE-

文件结构->

Workspace Folder
   main.py
   folder
      main.py

main.py->

import pickle

class RandomObject:
    def __init__(self) -> None:
        self.name = "Random Object"


def save_data(data, path):
    with open(path, "wb") as file:
        pickle.dump(data, file)
        file.close()

def load_data(path):
    with open(path, "rb") as file:
        data = pickle.load(file)
        file.close()
    return data

data = RandomObject()
save_data(data, "folder/data.pkl")
data = load_data("folder/data.pkl")
print(data.name)

文件夹/main.py ->

import pickle

class RandomObject:
    def __init__(self) -> None:
        self.name = "Random Object"

def load_data(path):
    with open(path, "rb") as file:
        data = pickle.load(file)
        file.close()
    return data

data = load_data("data.pkl")
print(data.name)

这2个脚本分别运行 完整的代码链接是 -> https://github.com/IGR2020/PyEngine

python save pickle
1个回答
0
投票

不是

main.py
所在的位置,而是
python
可执行文件的运行位置将决定它是否可以直接访问该文件。这称为运行可执行文件的工作目录。换句话说,如果您在终端中并且执行了操作(我假设您在 Windows 中运行):

cd "d:\path\to\Workspace Folder"
py main.py

在您的

main.py
中,当您执行相当于
open("data.pkl")
的操作时,它将在
d:\path\to\Workspace Folder
中查找该文件。

如果你这样做:

cd "d:\path\to\Workspace Folder"
py folder/main.py

它仍会在

d:\path\to\Workspace Folder
中查找该文件,因为这是启动解释器的位置。

如果你这样做

如果你这样做:

cd "d:\path\to\Workspace Folder\folder"
py main.py

这次,它将在

d:\path\to\Workspace Folder\folder
中查找该文件。


但是在您的情况下,由于您在 VSCode 中运行,您应该自定义启动配置,以便在正确的目录中运行 python 可执行文件。我将向您推荐这个answer,了解如何操作。

© www.soinside.com 2019 - 2024. All rights reserved.