Ich habe ein besonderes Problem mit JSON-Dateien. Der folgende Code liest json und schreibt in eine txt-Datei. Ich habe den Code für die Lesbarkeit gekürzt, in meinem echten Code sind es Hunderte von Feldern und Schreibanweisungen.wie file.write() eine leere Zeichenfolge, wenn Wörterbuch erzeugt einen KeyError in Python
import os
import json
def _getjson(filename):
""" returns a list of dictionaries """
if not os.path.exists(filename): return []
with open(filename, 'r') as openfileobject:
data = json.loads(openfileobject.read())
return data
def writefile(filename, data):
"""writes to file"""
with open(filename, 'w') as f:
for d in data:
f.write(d['field1'] + ' ' + d['field2'] + ' ' + d['field3'] + '\n')
## a lot more code here
def main():
filename = r'c:\input.json'
data = _getjson(filename)
outfile = r'c:\output.txt'
writefile(outfile, data)
if __name__ == '__main__':
main()
Das Problem ist, manchmal ist ein Feld nicht in json, und es entsteht ein KeyError
Während ich kann diese Falle mit einem try: except KeyError
. Es würde bedeuten, dass ich diesen Versuch um jedes Feld in meiner writefile
Funktion versuchen muss.
Gibt es einen Weg, ohne die f.write()
Aussagen zu ändern, dass auf KeyError
wird es eine leere Zeichenfolge schreiben? (also muss ich das nicht in Hunderte von try
Blöcke erfassen)
Also das ist ein Wörterbuch Problem, ich habe kein Problem mit dem JSON selbst. Ich kann nicht kontrollieren, welche Felder in meiner Eingabe sind, also kann eine Datei field1
und field2
haben. Der nächste könnte alle drei oder nur einen haben. Der JSON-Teil funktioniert, nur dass mir manchmal Felder fehlen.
Vielen Dank! Das hat den Trick gemacht! –
Sie könnten auch die Idee 'join()' auch darauf anwenden: 'f.write ('' .join (d.get (k, '') für k in ['field1', 'field2', 'field3 ']) +' \ n ') ' –