2016-10-15 3 views
0

작은 파이썬 스크립트를 사용하여 JSON 파일을 XML로 변환하려고하지만 어떤 이유로 루프가 JSON 파일의 첫 번째 행을 읽는 것 같습니다.루프는 파일의 첫 번째 행만 읽습니다.

from xml.dom import minidom 
from json import JSONDecoder 
import json 
import sys 
import csv 
import os 
import re 
import dicttoxml 
from datetime import datetime, timedelta 
from functools import partial 
reload(sys) 
sys.setdefaultencoding('utf-8') 

nav = 'navigation_items.bson.json' 
df = 'testxmloutput.txt' 

def json2xml(json_obj, line_padding=""): 
result_list = list() 

json_obj_type = type(json_obj) 

if json_obj_type is list: 
    for sub_elem in json_obj: 
     result_list.append(json2xml(sub_elem, line_padding)) 

    return "\n".join(result_list) 

if json_obj_type is dict: 
    for tag_name in json_obj: 
     sub_obj = json_obj[tag_name] 
     result_list.append("%s<%s>" % (line_padding, tag_name)) 
     result_list.append(json2xml(sub_obj, "\t" + line_padding)) 
     result_list.append("%s</%s>" % (line_padding, tag_name)) 

    return "\n".join(result_list) 

return "%s%s" % (line_padding, json_obj) 

def json_parse(fileobj, decoder=JSONDecoder(), buffersize=2048): 
buffer = '' 
for chunk in iter(partial(fileobj.read, buffersize), ''): 
    buffer += chunk 
    while buffer: 
     try: 
      result, index = decoder.raw_decode(buffer) 
      yield result 
      buffer = buffer[index:] 
     except ValueError: 
      # Not enough data to decode, read more 
      break 

데프 컨버터 (데이터) :

f = open(df,'w') 
data = open(nav) 
for line in json_parse(data): 
    f.write(dicttoxml.dicttoxml(line, attr_type=False)) 

f.close() 

converter(nav) 

나는 ITER가 메모리에 첫 번째 줄을 읽고 다음에 이동 것이라는 가정하에 있었다. 변환 된 출력은 멋지지만, 파일에서 다음 줄로 반복 처리하는 방법을 어디서 볼 것인지 확실하지 않습니다.

+0

iter 줄 바꿈을 삭제하면 어떻게됩니까? –

+0

동일한 작업을 수행합니다. 내가 어떻게 든 루핑 액션의 어떤 수준을 부정하고 있는지 궁금해. – hscorpio15201

+0

'json_parse() '란 무엇입니까? 표준 라이브러리에있는 것으로 보이지 않습니다. – martineau

답변

0

json.load를 사용하여 파일을 dict에로드 한 다음 출력용으로 dict를 반복하십시오.

import sys 
import json 

json_file = sys.argv[1] 
data = {} 
with open(json_file) as data_file:  
    data = json.load(data_file) 

for key in data: 
    #do your things 
+0

마지막으로 답을 찾았습니다. 내가 사용하고 있던 파일이 문제 였다고 나온다. 다른 줄을보기 위해 내 json 주변에 괄호가 있어야합니다. 하지만 당신의 대답은 또한 제 이해력이 조금 더 나아졌습니다. – hscorpio15201

관련 문제