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

标签 python json file variables directory

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

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

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

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

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

第二种方法是使用元组打包/拆包:

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 循环 期间阅读它们。

最佳答案

我会使用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

关于python - 将目录中的所有文件加载为名为正在加载的文件名的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43637796/

相关文章:

python - Numpy reshape 产生不同的大小错误

python - 将来自 angularjs 的帖子数据作为 JSON 而不是作为原始内容发送到 django

python pandas 两个数据帧的复杂合并

javascript - 访问 .json 文件导致银行假期访问被拒绝

php - PHP中file、file_get_contents和fopen的区别

python - 在python中使用PID启动进程并重用

javascript - 如何通过消息抛出 tv4 错误?

android - 抖动错误: Exception: type 'int' is not a subtype of type 'String'

java - Apache Tika 和文件访问而不是 Java 输入流

java - 文件读取 : Getting partial Output