簡體   English   中英

如果字典在python中產生KeyError,如何file.write()一個空字符串

[英]how to file.write() an empty string if dictionary produces a KeyError in python

我對json文件有特別的疑問。 以下代碼讀取json,然后寫入txt文件。 我已經縮短了代碼的可讀性,在我的實際代碼中,它是字段和write語句的雜亂無章。

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()

問題是,有時字段不在json中,並且會產生KeyError而我可以try: except KeyError 這意味着我需要在writefile函數的每個字段中進行嘗試。

有沒有一種方式,在不改變f.write()語句,即在KeyError會寫一個空字符串? (所以我不必在try塊的混亂中捕捉到這一點)

所以這是一個字典問題,我對json本身沒有任何問題。 我無法控制輸入中的字段,因此一個文件可能具有field1field2 下一個可能具有全部三個,也可能只有一個。 json部分有效,只是有時候我會缺少一些字段。

使用dict.get

f.write(d.get('field1', '') + ' ' +
        d.get('field2', '') + ' ' +
        d.get('field3', '') + '\n')

get()返回key的值,或者給定默認值None

更簡單的是str.joindict.values

f.write(' '.join(d.values()))

或者如果值不是字符串,請使用諸如

f.write(' '.join(str(value) for value in d.values()))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM