我有一个项目,其中应用程序加载数据并将其保存到子文件夹(它是一个 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
不是
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,了解如何操作。