json 파일에 특히 문제가 있습니다. 다음 코드는 json을 읽고 txt 파일에 씁니다. 가독성을 높이기 위해 코드를 줄였습니다. 실제 코드에서는 필드가 쓰여지고 문장이 쓰여집니다. 문제는dictionary가 파이썬에서 KeyError를 생성하는 경우 빈 문자열을 file.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
블록의 hundereds에서 이것을 캡쳐 할 필요가 없다)
이것은 사전 문제이다. 나는 json 자체에 아무런 문제가 없다. 입력란에 어떤 입력란이 있는지 제어 할 수 없으므로 하나의 파일에 field1
과 field2
이있을 수 있습니다. 그 다음은 3 가지 또는 모두를 가질 수 있습니다. json 파트가 작동하며 일부 필드가 누락 될 수 있습니다.
같은 genexps를 사용 감사합니다! 그 트릭을 했어! –
다음과 같이'join()'아이디어를 적용 할 수도 있습니다 :''field1 ','field2 ','field3의 k에 대해 f.write (''.join (d.get (k, '')) ']) +'\ n ')' –