使用列表打开文件?

时间:2017-04-18 18:19:56

标签: python json list

编辑:我写这个问题的方式没有找到我想要的答案。以下是我认为更清楚的问题的较短版本。

我想采用以下代码并将其压缩为一个for循环。

with open("vzt_notes", "r") as working_vzt_notes:
    vzt_notes = json.load(working_vzt_notes)
with open("rms_notes", "r") as working_rms_notes:
    rms_notes = json.load(working_rms_notes)
with open("nsr_notes", "r") as working_nsr_notes:
    nsr_notes = json.load(working_nsr_notes)
with open("py_notes", "r") as working_py_notes:
    py_notes = json.load(working_py_notes)
with open("vzt_keys", "r") as vzt_kw:
    vzt_keys = json.load(vzt_kw)
with open("rms_keys", "r") as rms_kw:
    rms_keys = json.load(rms_kw)
with open("nsr_keys", "r") as nsr_kw:
    nsr_keys = json.load(nsr_kw)
with open("py_keys", "r") as py_kw:
    py_keys = json.load(py_kw)

目前我一次打开一个文件。由于我将动态创建更多文件,我想要一个for循环,它将打开我在上面所做的庄园中的所有文件。我已经尝试了一些for循环,但是我可以得到一些工作是将所有正在打开的文件中的字典存储到一个大字典中。我不想这样做。我需要让for循环的结果执行相同的任务,一次打开一个文件,并将变量命名为与文件名相同,并将文件内容存储在该变量中。

3 个答案:

答案 0 :(得分:4)

您似乎正在尝试以编程方式将新变量添加到全局范围。为什么不将笔记存储在字典中呢?这是实现你想要的方法。

import json

def json_loader(filename):
    with open(filename) as f:
        return json.load(f)


def load_files(filenames):
    return (json_loader(filename) for filename in filenames)


filenames = [
    'vzt_notes', 'rms_notes', 'nsr_notes',
    'py_notes', 'vzt_keys', 'rms_keys',
    'nsr_keys', 'py_keys',
]

vzt_notes, rms_notes, nsr_notes, \
    py_notes, vzt_keys, rms_keys, \
    nsr_keys, py_keys = load_files(filenames)

print(list(load_files(filenames)))

使用上述方法,维护代码执行此操作可能会更好(更安全):

vzt_notes = json_loader('vzt_notes')
rms_notes = json_loader('rms_notes')
...

答案 1 :(得分:1)

以下是我认为您正在努力实现的目标:

for file_suffix in file_list:
    prefix = "working_"
    filename = prefix + file_suffix
    with open(filename, "r") as file_obj:
        data = json.load(file_obj)

我所做的就是更改变量名称,以免它们发生冲突。

答案 2 :(得分:0)

迭代文件名,打开每个文件名,将加载的文件追加到函数返回的列表中。

file_list =[ "vzt_notes","rms_notes","nsr_notes","py_notes","vzt_keys","rms_keys","nsr_keys","py_keys" ]

def loadFiles(event=None):
    loaded_file_list = []
    for filename in file_list:
        # You can reuse the file handle f
        with open(filename, "r") as f:
            loaded_file_list.append(json.load(f))
    return loaded_file_list

loaded_files = loadFiles()