首页 > 解决方案 > 从字典中附加行数据似乎“泄漏”

问题描述

我正在使用以下代码使用 python 3.6 遍历大量 JSON 文件(1000+),见下文。这一切看起来都很简单,但我发现有些列在后续行中被保留(因此重复)。我认为使用 .get() 方法可以解决 KeyErrors,但它没有按我预期的那样工作。

    def make_place_table(row):
     with open('place_table.csv', 'a', newline='') as results:
     writer = csv.writer(results)
     writer.writerow(row)
     row = []



for filename in glob.glob('/rawjson/*.json'):
    with open(filename) as filename:
        data = json.load(filename)          
#         
        has_error = bool('error' in data.keys())
        has_place_results = bool('place_results' in data.keys())
        
        if(has_error):    
                row=[]
                row.append(data['search_metadata']['id']) 
                row.append(data['error'])
                make_error_table(row)
        else:
            if(has_place_results):
                results =  {key:value for key,value in data.items() if key in 'place_results' } 
                place_results.update(results['place_results'])
                has_reviews = bool('user_reviews' in place_results.keys())
                has_extensions = bool('extensions' in place_results.keys())
                
                row = []
                row.append(data['search_metadata']['id'])
                row.append(place_results.get('title', 'n/a'))                    
                row.append(place_results['gps_coordinates']['latitude'])
                row.append(place_results['gps_coordinates']['longitude'])
                row.append(place_results.get('rating', 'n/a'))
                row.append(place_results.get('reviews', 'n/a'))
                row.append(place_results.get('price', 'n/a'))
                row.append(place_results.get('address', 'n/a'))   
                row.append(place_results.get('phone', 'n/a'))
                row.append(place_results['website'])
                amenity_type = [name for name in place_results['type']]
                row.append(amenity_type)
                row.append(place_results["hours"][3])
                row.append(place_results["hours"][4])
                row.append(place_results["hours"][5])
                row.append(place_results["hours"][6])
                row.append(place_results["hours"][0])
                row.append(place_results["hours"][1])
                row.append(place_results["hours"][2])
               
           make_place_table(row)
           row=[]

标签: pythondictionary

解决方案


推荐阅读