Ich habe den folgenden Code, aber aus irgendeinem Grund ist es nur die erste Zeile für das Auto schreiben und ignorieren jedes Auto nach.Python - keine zusätzlichen Zeilen von JSON
bearbeiten - Ich habe versucht, eine print field
in die Zeile nach for field in required_fields:
und aus irgendeinem Grund zeigt es nur das Feld bei der Analyse der ersten Zeile. Jede weitere Zeile gibt []
für jedes Feld zurück.
Was ich in der csv sehen, ist der Header und eine Zeile und dann ,,,,
import csv
import json
car_list = [
{
"Year": 1997,
"Make": "Ford",
"Model": "E350",
"Description": "ac, abs, moon",
"Price": 3000
},
{
"Year": 1999,
"Make": "Chevy",
"Model": "Venture \"Extended Edition\"",
"Price": 4900
},
{
"Year": 1999,
"Model": "Venture \"Extended Edition, Very Large\"",
"Description": "",
"Price": 5000
},
{
"Year": 1996,
"Make": "Jeep",
"Model": "Grand Cherokee",
"Description": "MUST SELL!air, moon roof, loaded",
"Price": 4799
}
]
def _get_attr(dict_, attrs):
try:
src = attrs[:]
root = attrs.pop(0)
node = dict_[root]
null = object()
for i, attr in enumerate(attrs[:]):
try:
node = node.get(attr, null)
except AttributeError:
node = null
if node is null:
# i+2 pop and last element
raise ValueError("%s not present (level %s)" % (attr, '->'.join(src[: i+2])))
return node
except KeyError:
raise ValueError("%s not present" % root)
required_fields = [
['Year'],
['Make'],
['Model'],
['Description'],
['Price']
]
f = csv.writer(open('test.csv', 'wb+'))
f.writerow(['Year',
'Make',
'Model',
'Description',
'Price'])
for car in car_list:
row_values = []
for field in required_fields:
try:
row_values.append(_get_attr(car, field))
except:
row_values.append('')
f.writerow(row_values)
Weil 'attrs.pop (0)' dein 'Feld' von' required_fields' entfernt. Listen werden als Referenz übergeben, nicht als Wert. –
ah ok. Wie bekomme ich es auf die ersten "erforderlichen Felder" in jeder Schleife zurückgesetzt? – whoisearth