30

JSON を呼び出して、関連データを CSV として解析しています。多くのキーが入力されていないため、中間の JSON dict ファイルにデフォルトのキーを入力する方法がわかりません。コンテンツを CSV に解析しようとすると、結果は KeyError になります。

現在、(製造元) の「NoneType」エラーが発生しています:

import urllib2, json, csv, sys, os, codecs, re

from collections import defaultdict

output = 'bb.csv'

csv_writer = csv.writer(open(output, 'w'))

header = ['sku', 'name', 'description', 'image', 'manufacturer', 'upc', 'department', 'class', 'subclass']

csv_writer.writerow(header)

i=1

while i<101:
    print i

    bb_url = urllib2.Request("http://api.remix.bestbuy.com/v1/products(sku=*)?show=sku,name,description,image,manufacturer,upc,department,class,subclass&format=json&sort=sku.asc&page=" + str(i) + "&pageSize=100&apiKey=*****************")
    bb_json = json.load(urllib2.urlopen(bb_url))

    print bb_json

    for product in bb_json['products']:
        row = []

        row.append(product['sku'])
        if product['name']:
            row.append(str((product['name']).encode('utf-8')))
        else:
            row.append("")
        row.append(str(product.get('description',"")))
        row.append(str(product['image'])+ " ")
        if product['name']:
            row.append(str(product.get('manufacturer',"").encode('utf-8')))
        else:
            row.append("")
        row.append(str(product.get('upc','').encode('utf-8')))
        row.append(str((product['department']).encode('utf-8')))
        row.append(str((product['class']).encode('utf-8')))
        row.append(str((product['subclass']).encode('utf-8')))

        csv_writer.writerow(row)

    i = i+1
4

4 に答える 4

70

your_dict.get(key, "default value")キーを直接参照する代わりに使用できます。

于 2014-07-17T21:44:40.457 に答える
9

「デフォルト」の引数名を使用しないでください。たとえば、デフォルト値として 1.0 が必要な場合、

rank = dict.get(key, 1.0)

詳細: TypeError: get() はキーワード引数を取りません

于 2015-02-11T19:51:52.453 に答える
2

次のような構文を使用できます。product.get("your field", "default value")

于 2014-07-17T21:45:15.733 に答える