[英]Append json files while iterating through for loop
我想遍历一系列页面并将它们全部保存到一个 json 文件中,即将第 2 页附加到第 1 页,将第 3 页附加到已附加到第 1 页的第 2 页。
for i in range(4):
response = requests.post("https://API&page="+str(i))
data = response.json()
my_data = json.load(open( "data.json" ))
my_data.update(my_data)
json.dump(data, open( "data.json", 'w' ))
基于类似问题的一些答案,我写了类似的东西,但它会覆盖而不是将一页附加到另一页。
json数据结构如下:
知道我做错了什么吗?
您的代码会在循环的每次迭代中覆盖data.json
文件的内容。 这是因为您在调用json.dump
时使用了'w'
模式,这将覆盖文件的内容。
要将数据附加到文件,您可以在调用json.dump
时使用'a'
模式而不是'w'
。 这会将数据附加到文件末尾,而不是覆盖内容。
像这样
for i in range(4):
response = requests.post("https://API&page="+str(i))
data = response.json()
my_data = json.load(open( "data.json" ))
my_data.update(my_data)
json.dump(data, open( "data.json", 'a' ))
你想要达到什么目的?
您每次都用保存在变量data
中的响应结果覆盖文件data.json
。
您的代码有两个问题:您正在更新字典和覆盖文件。 两者中的任何一个都可以解决您的问题,具体取决于您想要实现的目标。
看起来您反而想像这样保存my_data
的内容:
json.dump(my_data, open( "data.json", 'w' ))
无论如何, my_data
将是一个每次都会覆盖其内容的字典。 根据data
的结构,这可能不是您想要的。
我会更好地解释:如果您的结构对于任何页面来说都是
{
"username": "retne",
"page": <page-number>
}
my_data
将等于最后一个data
页。
此外,关于第二个问题,如果您以'w'
模式打开文件,您将始终覆盖它。 如果您将以'a'
模式打开它,您将向其附加数据,获得如下内容:
{
"username": "retne",
"page": 1
}
{
"username": "pentracchiano",
"page": 2
}
{
"username": "foo",
"page": 3
}
但这不是有效的.json
文件,因为它包含多个没有分隔符的对象。
尝试更清楚地了解您的意图,我可以提供额外的支持。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.