【问题标题】:How to append list entries to a JSON file through a for loop?如何通过 for 循环将列表条目附加到 JSON 文件?
【发布时间】:2022-11-13 17:57:23
【问题描述】:

在下面的代码中,我试图将每个 oth 元素附加到 JSON 文件中:

title = []  # api_result['search_results']['title']
asin = []  # api_result['search_results']['asin']
link = []  # api_result['search_results']['link']
categories = []  # api_result['search_results']['categories'][0]['name']
image_url = []  # api_result['search_results']['image']
rating = []
rating_total = []
price = []  # apit_result['prices'][0]['value']
top_positive_review = []
top_positive_review_rating = []
top_critical_review = []
top_critical_review_rating = []
ratings_total_filtered = []  # apit_result['']
reviews_total_filtered = []
reviews_total = []
reviews = []

for o in range(len(title)):
    with open("metadata.jsonl", "w+") as outfile:
        entry = {
                'title': title[o],
                'asin': asin[o],
                'link': link[o],
                'categories': categories[o],
                'image_url': image_url[o],
                'rating': rating[o],
                'rating_total': rating_total[o],
                'price': price[o],
                'top_positive_review': top_positive_review[o],
                'top_positive_review_rating': top_positive_review_rating[o],
                'top_critical_review': top_critical_review[o],
                'top_critical_review_rating': top_critical_review_rating[o],
                'ratings_total_filtered': ratings_total_filtered[o],
                'reviews_total_filtered': reviews_total_filtered[o],
                'reviews_total': reviews_total[o],
                'reviews': reviews[o]}

我认为这不是正确的做法。基本上,我想在metadata.jsonl 文件中加入这样的条目:

{"title":"some title", "asin":"ABCDEF", ...}
{"title":"another title", "asin":"GHIJKL", ...}
...

我哪里错了?

【问题讨论】:

  • " 我正在尝试将所有其他元素附加到 JSON 文件中:" 每第 n 个元素什么?如果您希望 o 表示列表中元素之间的距离(我认为?),那么它也不能表示您从range 获得的数值。请阅读How to Askminimal reproducible example 并尝试显示简单但完整示例:title 中可能包含什么? o 的值可能是多少?对应的结果究竟应该是什么?
  • 列表的每一个元素

标签: python json list dictionary


【解决方案1】:

使用with open 块只能打开文件一次,否则它会在每次迭代时打开和关闭文件。

此后,只需在每次迭代时换行。

看看这段代码:

import json

# I am assuming your data in this form
title = ['title_0', 'title_1']
link = ['link_0', 'link_1']

with open("metadata.jsonl", "w") as file:
    for o in range(len(title)):
        entry = {
            'title': title[o],
            'link': link[o],
        }
        json_object = json.dumps(entry, ensure_ascii=False)  # on line json
        file.write(json_object)
        file.write("
")

输出将是:

{"title": "title_0", "link": "link_0"}
{"title": "title_1", "link": "link_1"}

【讨论】:

  • 这可行,但是如果我尝试获取title 密钥怎么办。它不会只返回第一个吗?
猜你喜欢
  • 2020-04-25
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2015-04-27
  • 1970-01-01
  • 2021-05-19
  • 2020-09-25
  • 2023-01-07
相关资源
最近更新 更多