我如何在Python中做到这一点?文件存储在本地,我通过每个元素的名称来决定删除哪个元素。

3 个评论
你是如何决定你要删除哪个元素的?
按每个元素中的名称
你已经添加了 python 标签,但你的问题中没有添加任何代码。
python
json
SPEEDBIRD101
SPEEDBIRD101
发布于 2022-04-06
5 个回答
Professor Dragon
Professor Dragon
发布于 2022-04-06
已采纳
0 人赞同

我将加载文件,删除该项目,然后再次保存它。例子。

import json
with open("filename.json") as f:
    data = json.load(f)
f.pop(data["names"][1]) # or iterate through entries to find matching name
with open("filename.json", "w") as f:
    json.dump(data, f)
    
读取文件时应使用。 data = json.load(f) ,而写入应该用 json.dump(data,f) 。我敢肯定, f.write(data) 会导致一个错误。
Sakib Hasan
Sakib Hasan
发布于 2022-04-06
0 人赞同

你将不得不读取文件,将其转换为Python本地数据类型(例如字典),然后删除元素并保存文件。在你的案例中,类似这样的方法可以发挥作用。

import json
filepath = 'data.json'
with open(filepath, 'r') as fp:
    data = json.load(fp)
del data['names'][1]
with open(filepath, 'w') as fp:
    json.dump(data, fp)
    
Nguyễn Vũ Trung Hiếu
Nguyễn Vũ Trung Hiếu
发布于 2022-04-06
0 人赞同

Try this:

# importing the module
import ast
# reading the data from the file
with open('dictionary.txt') as f:
    data = f.read()
print("Data type before reconstruction : ", type(data))
# reconstructing the data as a dictionary
a_dict = ast.literal_eval(data)
{"names":[a for a in a_dict["names"] if a.get("name") !="XY_MAGIC#1111"]}
    
Pavan Kumar T S
Pavan Kumar T S
发布于 2022-04-06
0 人赞同
import json
with open("test.json",'r') as f:
   data = json.loads(f.read())
   names=data.get('names')
   for idx,name in enumerate(names):
      if name['name']=='XY_MAGIC#1111':
         del names[idx]
         break
   print(names)

为了读取文件,最好的方法是使用with语句,然后你可以使用pythons json库并将json字符串转换为python dict,一旦你得到dict,你就可以访问其值并按要求进行操作。

你的代码目前有一个错误。读取文件应该用。 data = json.load(f)
@quamrana 如果我们直接传递文件,那么我们可以使用json.load,但我向json.load传递的是字符串,而不是文件。load接受字符串,而load接受文件。
那么,当你可以直接把文件传给 load(f) 时,为什么要把一个字符串传给 loads() 呢?
是的,你是对的。但我有一个使用负载的习惯,因为大部分时间我都在处理字符串。
是的,这很公平。(我也是)
Ukulele
Ukulele
发布于 2022-04-06
0 人赞同

这是使用python json 模块做正确的事情,并在事后将json打印回文件中。

import json
jsonpath = '/path/to/json/file.json'
with open(jsonpath) as file:
    j = json.loads(file.read())
names_to_remove = ['XY_MAGIC#1111']
for element in j['names']:
    if element['name'] in names_to_remove: