Assez nouveau pour python, développeur novice, premier appelant
J'appelle du JSON et analyse les données pertinentes en tant que csv. Je ne peux pas comprendre comment remplir le fichier json Dict intermédiaire avec des clés par défaut, car beaucoup ne sont pas peuplés. Le résultat est une erreur de clé lorsque j'essaie d'analyser le contenu dans un fichier csv. J'adorerais tout conseil!
Merci.
Mise à jour: merci à tous! Je reçois maintenant une erreur "NoneType" pour (fabricant):
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
Vous pouvez utiliser your_dict.get(key, "default value")
au lieu de référencer directement une clé.
N'utilisez pas le nom d'argument "par défaut". Par exemple, si nous voulons 1.0 comme valeur par défaut,
rank = dict.get(key, 1.0)
Pour plus de détails: TypeError: get () ne prend aucun argument de mot clé
Si vous ne pouvez pas définir de valeur par défaut et que vous souhaitez faire autre chose (ou simplement omettre l'entrée):
if key in dict:
rank = dict[key]
else:
# do something or just skip the else block entirely
Vous pouvez utiliser une syntaxe comme celle-ci: product.get("your field", "default value")