迭代JSON文件并将dict值写入列表

2024-04-23 20:40:02 发布

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

我试图遍历JSON文件,并将部分文件名保存在另一个JSON文件存储的列表中。当我在append()之后print(list_of_files)时,我会得到文件名的完整列表。然而,当我将其存储在JSON文件中时,我的列表上只有一个条目

这是我的密码:

all_json = '/mypath/...'

for name_of_file in all_json:
    with open(name_of_file) as f:
        json_files = json.load(f)
        list_of_files = []
        basename = os.path.basename(name_of_file)
        name = basename[0:-9]
        list_of_files.append(name)
        print(list_of_files)
        with open('orderOfSamples_600.json', 'w') as f:
            json.dump(list_of_files, f, indent=4)

我错过了什么


3条回答

如果您只想使用另一个列表中存储的部分文件名创建一个新列表,然后将其保存为JSON格式,那么您只需执行以下操作:

import json
from glob import glob
from os.path import basename

json_files = glob('/my/path/*.json')

base_names = list(map(basename, json_files))
base_names = [_[:-9] for _ in base_names]
with open('orderOfSamples_600.json', 'w') as f:
    json.dump(base_names, f, indent=4)

前面的答案非常有效。使用当前代码实现此目标的另一种方法是更改打开文件的方式。您正在使用with open('orderOfSamples_600.json', 'w') as f。当您用“w”打开文件时,它将用您放入的内容覆盖文件内容。您应该使用“a”进行追加,而不是覆盖with open('orderOfSamples_600.json', 'a') as f:所以,总的来说


for name_of_file in all_json:
    with open(name_of_file) as f:
        json_files = json.load(f)
        list_of_files = []
        basename = os.path.basename(name_of_file)
        name = basename[0:-9]
        list_of_files.append(name)
        print(list_of_files)
        with open('orderOfSamples_600.json', 'a') as f:
            json.dump(list_of_files, f, indent=4)

您在for循环中定义了list_of_files,因此它在每次迭代中都被覆盖,这就是为什么它只包含上一次迭代中附加的1个元素

为了避免这种情况,在循环外定义list_of_files


all_json = '/mypath/...'
list_of_files = []

for name_of_file in all_json:
    with open(name_of_file) as f:
        json_files = json.load(f)
        list_of_files = []
        basename = os.path.basename(name_of_file)
        name = basename[0:-9]
        list_of_files.append(name)
        print(list_of_files)
        with open('orderOfSamples_600.json', 'w') as f:
            json.dump(list_of_files, f, indent=4)

相关问题 更多 >