使用列表打开文件?

2024-04-26 01:21:25 发布

您现在位置:Python中文网/ 问答频道 /正文

编辑:我写问题的方式并不是为了得到我想要的答案。这是一个简短的问题,我认为更清楚。你知道吗

我想把下面的代码压缩成一个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循环的结果执行与每次打开一个文件、将变量命名为与文件名相同并将文件内容存储在该变量中相同的任务。你知道吗


Tags: 文件pyjsonforaswithloadopen
3条回答

看起来您正在尝试以编程方式向全局范围添加新变量。为什么不把笔记存到字典里呢?这里有一个方法来实现你想要的。你知道吗

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')
...

以下是我认为你想要达到的目标:

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

我所做的就是更改变量名,这样它们就不会发生冲突。你知道吗

迭代文件名,打开每个文件名,将加载的文件附加到函数返回的列表中。你知道吗

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()

相关问题 更多 >