2017-04-30 2 views
1

Ich mache ein Wörterbuch von uns Metropolregionen. Struktur ist wie folgt:Python Typ Fehler beim Schreiben einer JSON-Datei

{ 
    "Abilene": { 
    "allCities": [ 
     "Abilene" 
    ], 
    "latitude": "30.1588129", 
    "longName": "Abilene, TX Metropolitan Statistical Area", 
    "longitude": "-85.6602058", 
    "primaryState": "TX", 
    "states": [ 
     "TX" 
    ] 
    }, 

Ich möchte dieses Wörterbuch als json in eine Datei schreiben, in Unicode codiert, so dass ich importiert Unicode-Literale und die io-Paket:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 
import io 
from os.path import exists 
import json 
import unicodedata 

I Schlüssel in Literale bin Einstellung und Werte in Unicode-Strings.

metropolitans[primaryCity] = {'allCities':allCities, 'longName':longName, 'allStates':states, 'primaryState':states[0]} 

metropolitans[primaryCity]['longitude'] = unicode(str(coordinates[primaryCity]['longitude']), encoding = 'utf-8') 

Dann möchte ich Metropoliten zu einer JSON-Datei in Unicode speichern.

with io.open('results.json', 'w', encoding='utf-8') as results: 
results.truncate() 
json.dump(metropolitans, results, ensure_ascii=False, encoding='utf-8', results, indent=2, sort_keys=True) 

Und bekomme ich diesen Fehler:

File "readMetropolitan.py", line 190, in <module> 
json.dump(metropolitans, results, indent=2, sort_keys=True) 
File "/usr/lib/python2.7/json/__init__.py", line 190, in dump 
    fp.write(chunk) 
TypeError: write() argument 1 must be unicode, not str 

Warum ist das so? Ich weiß, dass ich eine Datei mit 'wb' schreiben kann, aber ich möchte diese Datei in Unicode schreiben.

kann ich diese Datei schreiben, wenn ich Dumps() und write():

s = json.dumps(metropolitans, ensure_ascii=False, encoding='utf-8', indent=2, sort_keys=True) 
results.write(s) 
+0

könnten Sie Ihren ganzen Code zur Verfügung stellen? –

+0

Ich glaube nicht, dass Sie die 'encoding = 'utf-8'' im' with io.open (...) 'brauchen. – tiwo

+0

Woher kommen die Daten wie 'longName' ?. Ist es Unicode? –

Antwort

0

Der Code, den Sie über den Fehlercode geschrieben hat nicht einmal lief seit der Fehler Zurückverfolgungs sagte der Fehler aufgetreten ist, wenn diese Zeile in Zeile 190 in der Datei readMetropolitan.py ausgeführt wird:

json.dump(metropolitans, results, indent=2, sort_keys=True) 

Während der Code, den Sie geschrieben war:

json.dump(metropolitans, ensure_ascii=False, encoding='utf-8', results, indent=2, sort_keys=True) 

Sie sind definitiv nicht das Gleiche. Vielleicht wurde der Code vor der Bearbeitung ausgeführt?

In den ersten beiden Zeilen des Fehler-Tracebacks wurde genau angegeben, was den Fehler ausgelöst hat.

File "readMetropolitan.py", line 190, in <module> 
json.dump(metropolitans, results, indent=2, sort_keys=True) 
File "/usr/lib/python2.7/json/__init__.py", line 190, in dump 
    fp.write(chunk) 
TypeError: write() argument 1 must be unicode, not str 

Plus Sie können keine Positions Argument results nach Schlüsselwort Argumente haben. Deshalb sollte es stattdessen sein:

json.dump(metropolitans, results, ensure_ascii=False, encoding='utf-8', indent=2, sort_keys=True) 
+0

Sie haben Recht. Ich habe bearbeitet! – Heuyie

Verwandte Themen