如何使用python修改JSON文件中的多个值

0 人关注

我正试图修改我的JSON文件,我需要用基本路径替换file_name。 结构如下。

data = {"images": [
        "id": 1,
        "file_name": "Folder1/Folder2/Folder3/Folder4/1110.jpg",
        "height": 3024,
        "width": 4032
        "id": 2,
        "file_name": "Folder1/Folder2/Folder3/Folder4/1111.jpg",
        "height": 3024,
        "width": 4032
        "id": 3,
        "file_name": "Folder1/Folder2/Folder3/Folder4/1112.jpg",
        "height": 3024,
        "width": 4032

Here is my code which I tried

data = json.load(open(".\example.json"))

首先,我用以下代码检查了完整的文件名

for img in data['images']:
    print(img["file_name"])

Below is the Output for this cell

Folder1/Folder2/Folder3/Folder4/1110.jpg
Folder1/Folder2/Folder3/Folder4/1110.jpg
Folder1/Folder2/Folder3/Folder4/1110.jpg

然后我修改了它,得到了如下的基本路径

for feature in data['images']:
    feature['file_name'] = os.path.basename(feature["file_name"])
    print(feature['file_name'])

This is the output:

1110.jpg
1111.jpg
1112.jpg

当我试图将其转储为一个JSON文件时,但我只得到一个file_name。

data = {1110.jpg}

我希望得到如下的输出。请用你的输入帮助我

data = {"images": [
        "id": 1,
        "file_name": "1110.jpg",
        "height": 3024,
        "width": 4032
        "id": 2,
        "file_name": "1111.jpg",
        "height": 3024,
        "width": 4032
        "id": 3,
        "file_name": "1112.jpg",
        "height": 3024,
        "width": 4032
    
2 个评论
创建一个列表并将所有的输出附加到那里,然后遍历这个列表并将其中的项目添加到json文件中,或者直接这样做。
yogi
谢谢你的快速回复@Matiiss,是的,我错过了转储JSON文件。无论如何,下面的答案已经解决了我的疑问。
python
json
yogi
yogi
发布于 2021-03-31
2 个回答
Krishna Chaurasia
Krishna Chaurasia
发布于 2021-03-31
已采纳
0 人赞同

如果你已经解决了变量名称的差异,那么代码就会如期工作。

此外,我还建议使用上下文管理器 with 打开文件,这样当 with 块退出时,它就会自动关闭。

import json, os
with open(".\example.json", 'r') as f:
    data = json.load(f)
for feature in data['images']:
    feature['file_name'] = os.path.basename(feature["file_name"])
print(data)

Output:

Data in json file:

{'images': [{'id': 1, 'file_name': 'Folder1/Folder2/Folder3/Folder4/1110.jpg', 'height': 3024, 'width': 4032}, {'id': 2, 'file_name': 'Folder1/Folder2/Folder3/Folder4/1111.jpg', 'height': 3024, 'width': 4032}, {'id': 3, 'file_name': 'Folder1/Folder2/Folder3/Folder4/1112.jpg', 'height': 3024, 'width': 4032}]}

格式化的数据。

{'images': [{'id': 1, 'file_name': '1110.jpg', 'height': 3024, 'width': 4032}, {'id': 2, 'file_name': '1111.jpg', 'height': 3024, 'width': 4032}, {'id': 3, 'file_name': '1112.jpg', 'height': 3024, 'width': 4032}]}
    
yogi
谢谢你 @Krishna,它完全按照我的期望工作。正如你提到的,这是变量名称不同的问题。我纠正了它。
很高兴问题很快得到了解决!
Sanchit.Jain
Sanchit.Jain
发布于 2021-03-31
0 人赞同

问题在这一行 for feature in temp['images']: ,请改成 for feature in data['images']

for feature in data['images']:
    feature['file_name'] = os.path.basename(feature["file_name"])
print(data)