[英]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本身沒有任何問題。 我無法控制輸入中的字段,因此一個文件可能具有field1
和field2
。 下一個可能具有全部三個,也可能只有一個。 json部分有效,只是有時候我會缺少一些字段。
使用dict.get
:
f.write(d.get('field1', '') + ' ' +
d.get('field2', '') + ' ' +
d.get('field3', '') + '\n')
get()
返回key的值,或者給定默認值或None
。
更簡單的是str.join
與dict.values
。
f.write(' '.join(d.values()))
或者如果值不是字符串,請使用諸如
f.write(' '.join(str(value) for value in d.values()))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.