gpt4 book ai didi

python - 为什么在尝试从 JSON 对象中删除值时出现错误 "' unicode' 对象不支持项目删除?

转载 作者:太空狗 更新时间:2023-10-29 20:36:29 26 4
gpt4 key购买 nike

我正在尝试遍历对象列表,从每个对象中删除一个元素。每个对象都是一个新行。然后,我尝试按原样保存新文件,而对象中不包含元素。

{
"business_id": "fNGIbpazjTRdXgwRY_NIXA",
"full_address": "1201 Washington Ave\nCarnegie, PA 15106",
"hours": {
"Monday": {
"close": "23:00",
"open": "11:00"
},
"Tuesday": {
"close": "23:00",
"open": "11:00"
},
"Friday": {
"close": "23:00",
"open": "11:00"
},
"Wednesday": {
"close": "23:00",
"open": "11:00"
},
"Thursday": {
"close": "23:00",
"open": "11:00"
},
"Saturday": {
"close": "23:00",
"open": "11:00"
}
},
"open": true,
"categories": ["Bars", "American (Traditional)", "Nightlife", "Lounges", "Restaurants"],
"city": "Carnegie",
"review_count": 7,
"name": "Rocky's Lounge",
"neighborhoods": [],
"longitude": -80.0849416,
"state": "PA",
"stars": 4.0,
"latitude": 40.3964688,
"attributes": {
"Alcohol": "full_bar",
"Noise Level": "average",
"Music": {
"dj": false
},
"Attire": "casual",
"Ambience": {
"romantic": false,
"intimate": false,
"touristy": false,
"hipster": false,
"divey": false,
"classy": false,
"trendy": false,
"upscale": false,
"casual": false
},
"Good for Kids": true,
"Wheelchair Accessible": true,
"Good For Dancing": false,
"Delivery": false,
"Dogs Allowed": false,
"Coat Check": false,
"Smoking": "no",
"Accepts Credit Cards": true,
"Take-out": true,
"Price Range": 1,
"Outdoor Seating": false,
"Takes Reservations": false,
"Waiter Service": true,
"Wi-Fi": "free",
"Caters": false,
"Good For": {
"dessert": false,
"latenight": false,
"lunch": false,
"dinner": false,
"brunch": false,
"breakfast": false
},
"Parking": {
"garage": false,
"street": false,
"validated": false,
"lot": true,
"valet": false
},
"Has TV": true,
"Good For Groups": true
},
"type": "business"
}

我需要删除 hours 元素中包含的信息,但这些信息并不总是相同的。有的包含所有天数,有的只包含一两天的信息。

这是我试过的代码:

import json

with open('data.json') as data_file:
data = json.load(data_file)
for element in data:
del element['hours']

但是,我在运行代码时遇到错误:

TypeError: 'unicode' object does not support item deletion

最佳答案

假设您要覆盖同一个文件:

import json

with open('data.json', 'r') as data_file:
data = json.load(data_file)

for element in data:
element.pop('hours', None)

with open('data.json', 'w') as data_file:
data = json.dump(data, data_file)

dict.pop(<key>, not_found=None)如果我了解您的要求,可能就是您要找的东西。因为它会删除 hours如果存在则为 key ,如果不存在则不会失败。

但是我不确定我是否理解为什么 hours 键是否包含几天对你有影响,因为你只是想摆脱整个键/值对,对吧?

现在,如果你真的想使用 del而不是 pop , 以下是如何使您的代码工作:

import json

with open('data.json') as data_file:
data = json.load(data_file)

for element in data:
if 'hours' in element:
del element['hours']

with open('data.json', 'w') as data_file:
data = json.dump(data, data_file)

如果你想把它写到另一个文件中,只需在第二个文件中更改文件名open声明。

您可能已经注意到,我不得不更改缩进,以便文件在数据清理阶段关闭,并可以在最后被覆盖。

with就是所谓的上下文管理器,无论它提供什么(这里是 data_file 文件描述符)在该上下文中可用。这意味着一旦 with 的缩进 block 结束,文件关闭,上下文结束,同时文件描述符变得无效/过时。

如果不这样做,您将无法以写入模式打开文件并获取要写入的新文件描述符。

关于python - 为什么在尝试从 JSON 对象中删除值时出现错误 "' unicode' 对象不支持项目删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36606930/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com