在我使用以下代码的那一刻,我需要从json中删除数据:
import json
with open('E:/file/timings.json', 'r+') as f:
qe = json.load(f)
for item in qe['times']:
if item['Proc'] == 'APS':
print(f'{item["Num"]}')
del item
json.dump(qe, f, indent=4, sort_keys=False, ensure_ascii=False)
这不会从JSON中删除任何内容,这是我的JSON文件的一个小示例
{
"times": [
{
"Num": "12345678901234567",
"Start_Time": "2016-12-14 15:54:35",
"Proc": "UPD",
},
{
"Num": "12345678901234567",
"Start_Time": "2016-12-08 15:34:05",
"Proc": "APS",
},
{
"Num": "12345678901234567",
"Start_Time": "2016-11-30 11:20:21",
"Proc": "Dev,
我希望它看起来像这样:
{
"times": [
{
"Num": "12345678901234567",
"Start_Time": "2016-12-14 15:54:35",
"Proc": "UPD",
},
{
"Num": "12345678901234567",
"Start_Time": "2016-11-30 11:20:21",
"Proc": "Dev,
如您所见,由于该过程已被删除,因此包含APS的部分
答案 0 :(得分:1)
在迭代列表时删除元素不是一个好习惯。
使用:
import json
with open('E:/file/timings.json', 'r') as f:
qe = json.load(f)
qe = [item for item in qe['times'] if item['Proc'] != 'APS'] #Delete Required element.
with open('E:/file/timings.json', 'w') as f:
json.dump(qe, f, indent=4, sort_keys=False, ensure_ascii=False)
答案 1 :(得分:1)
del
在使用时,将从会话中删除变量item
,但在数据结构中保留了实际内容。您需要从数据结构中明确删除item
指向的内容。另外,您还希望避免在遍历该列表时从列表中删除项目。您应该重新创建整个列表:
qe['times'] = [item for item in qe['times'] if item['Proc'] != 'APS']
如果需要打印,可以使用一种方法:
def keep_item(thing):
if item['Proc'] == 'APS':
print thing['Num']
return False
else:
return True
qe['times'] = [item for item in qe['times'] if keep_item(item)]
答案 2 :(得分:1)
您可以保存您的初始json,然后创建一个新的不包含“ Proc”等于“ APS”(此处为new_json
)的项,然后用该{{1} }。
new_json
答案 3 :(得分:0)
您可以使用以下方法从列表中删除元素:
for i,item in enumerate(qe['times']):
if item['Proc'] == 'APS':
qe['times'].pop(i)
,然后写回JSON文件。