将目录中的所有文件加载为名为正在加载的文件名的变量?

Load all files in a directory as a variable named the filename being loaded?

我一直在尝试创建一个程序,允许用户创建一个文件来存储他们的笔记。我已经设法解决了这部分问题,但现在 运行 遇到了将所有文件加载为程序其余部分可以轻松访问的变量的问题。我设法找到了 2 种方法来实现这一点。

一种是每次调用一个文件:

with open("file_name", "r") as working_notes:
    file_name = json.load(working_notes)

... # and repeat for every file that needs to be opened.

正如您想象的那样,这将变得有点需要维护,并且每次创建新文件时都需要更新代码。短期内完成工作非常好,但未来真的很糟糕。

第二种方法是使用元组packing/unpacking:

vzt_notes, rms_notes, nsr_notes, py_notes,\
vzt_keys, rms_keys, nsr_keys, py_keys, java_notes,\
java_keys= load_files(filenames) 
# calls a function that opens all files related to each variable

这确实有效,我需要做的就是向元组列表添加一个变量名,它工作正常,但这仍然需要我在每次创建文件时编辑代码。通过调用函数,它更加紧凑并且部分自动化,但我需要完全自动化。

这就是我卡住的地方。在尝试了我编写的各种循环或尝试从列表中创建变量(惨败)后,当程序作为文件名的变量名启动时,我无法接缝加载所有文件。

所以我最近的尝试只是能够打印出所有文件的内容,但我仍然不确定如何获取正在打开的文件的文件名并将其设为与文件名,以便程序的其余部分可以看到并使用所述变量。

这是我最后尝试的方法:

import os

path = 'C:/Users/mcdomi3/Documents/MINTworkspace/MINT/NotesKeys/'

for filename in os.listdir(path):
    with open(path+filename, "r+") as filename:
        filename = json.load(filename)
        # print (filename)

正如我所说,最后一次尝试只是打印列出的文件的内容,只是为了看看它是否真的在对这些文件做些什么。所以我知道我至少可以在 for loop.

期间阅读它们

我会使用 dict 来存储来自未知数量的笔记本文件的数据:

import os
import json

path = 'C:/Users/mcdomi3/Documents/MINTworkspace/MINT/NotesKeys/'

notebook = dict()

for filename in os.listdir(path):
    with open(path+filename, "r+") as filehandle:
        notebook[filename] = json.load(filehandle)

之后您可以通过notebook["file_name_of_notebook"]访问每个笔记本的内容。

如果你真的需要变量,试试这个方法 globals():

>>> new_name #variable not existing yet
Traceback (most recent call last):
  File "<pyshell#18>", line 1, in <module>
    new_name
NameError: name 'new_name' is not defined
>>> globals()["new_name"]="new value"
>>> print(new_name)
new value