我试图循环删除每个对象中删除元素的对象列表。每个对象都是一个新行。我试图保存新文件,而不包含对象中包含的元素。我知道这可能是一项简单的任务,但我似乎无法完成这项工作。如果有人能提供帮助,将不胜感激。感谢。
{
"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元素中包含的信息,但信息并不总是相同。有些包含所有日期,有些仅包含一天或两天的信息。我尝试使用的代码是Pyton,我整天都在搜索我的问题。我对Python不是很熟练。任何帮助,将不胜感激。
import json
with open('data.json') as data_file:
data = json.load(data_file)
for element in data:
del element['hours']
抱歉,只是添加运行代码时遇到的错误 TypeError:' unicode'对象不支持项目删除
答案 0 :(得分:20)
假设您要覆盖同一个文件:
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
密钥,如果不存在则不会失败。
但是我不确定我理解为什么小时键是否包含某些天会对你产生影响,因为你只想摆脱整个键/值对,对吧?
现在,如果您真的想使用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)
修改强> 因此,正如您所看到的,我添加了将数据写回文件的代码。 如果要将其写入另一个文件,只需在第二个打开的语句中更改文件名。
我不得不改变缩进,正如您可能已经注意到的那样,因此文件在数据清理阶段已经关闭,并且可以在最后被覆盖。
with
是所谓的上下文管理器,无论它提供什么(这里的data_file文件描述符)在该上下文中都可用 ONLY 。这意味着只要with
块的缩进结束,文件就会关闭,上下文结束,文件描述符也会变为无效/过时。
如果不这样做,您将无法以写入模式打开文件并获取要写入的新文件描述符。
我希望它足够清楚......
第二次编辑
这一次,您似乎很清楚需要这样做:
with open('dest_file.json', 'w') as dest_file:
with open('source_file.json', 'r') as source_file:
for line in source_file:
element = json.loads(line.strip())
if 'hours' in element:
del element['hours']
dest_file.write(json.dumps(element))
答案 1 :(得分:0)
myVar and myFunction()
这是我使用的方法。