2016-11-05 3 views
0

없이 인쇄 사전 그래서처럼 파일로 음악 API 쓰기 결과를 procesing하고 다음과 같이파이썬 - 쉼표

for val, track_id in zip(values,list(track_ids)): 
    #below 
    if val < threshold: 
     data = {"artist": sp.track(track_id)['artists'][0]['name'], "track":sp.track(track_id)['name'], "feature": filter_name, "value": val} 
     #write to file 
     with io.open('db/json' + '/' + user + '_' + product + '_' + filter_name + '.json', 'a', encoding='utf-8') as f: 
      f.write(json.dumps(data, ensure_ascii=False, indent=4, sort_keys=True)) 

데이터가 인쇄되어 있습니다 :

}{ 
    "artist": "Radiohead", 
    "feature": "tempo", 
    "track": "Climbing Up the Walls", 
    "value": 78.653 
}{ 
    "artist": "The Verve", 
    "feature": "tempo", 
    "track": "The Drugs Don't Work", 
    "value": 77.368 
}{ 

병목 현상이 있다는 것입니다, 코드 아래로이 파일을 eval으로 평가하려고하면 오류가 발생합니다.

File "<string>", line 6 
    }{ 
    ^

' 쉼표를 삽입하여 보조 기호를 분리하려면 어떻게해야합니까?

+0

여러 사전을 파일에 한 번에 쓸 때 사용하는 루프는 어디에 있습니까? – Kevin

+0

@Kevin 거기에 가서, –

답변

1

JSON 데이터를 작성하는 것처럼 보입니다. 그렇다면 json 모듈을 사용하여 사전을 파일로 간단히 덤프 할 수 있습니다. 먼저 모든 데이터 개체를 단일 music 목록에 추가해야합니다. 그런 다음 해당 목록을 JSON으로 인코딩하고 파일에 쓸 수 있습니다. 당신이 그것을 도울 수 있다면

import json 

music = [ 
    { 
     "artist": "Radiohead", 
     "feature": "tempo", 
     "track": "Climbing Up the Walls", 
     "value": 78.653 
    }, 
    { 
     "artist": "The Verve", 
     "feature": "tempo", 
     "track": "The Drugs Don't Work", 
     "value": 77.368 
    } 
] 

with open('music.json') as f: 
    json.dump(music, f, sort_keys=True, indent=4) 
또한

https://docs.python.org/2/library/json.html#json.dump

, 당신은 eval()를 사용해서는 안됩니다; 특히 파일에서 무작위 입력을 읽을 때. 엄청나게 깨지기 쉽지만 믿을 수 없을만큼 불안합니다. 누군가 당신이 평가하는 파일에 악성 코드를 쉽게 넣을 수 있습니다.

대신 json.load()을 사용하여 파일에서 JSON을로드해야합니다. 이렇게하면 파일의 형식이 JSON으로 올바르게 설정되고 모든 작업이 복잡해집니다.

with open('music.json') as f: 
    music = json.load(f) 
+0

을 편집했습니다. 제 'json.dumps'가 위의 코드에서 작동하지 않는 이유를 설명 할 수 있도록 답을 편집 할 수 있습니까? –

+2

'json.dumps'는'json.dump' 문자열을 파일에 출력합니다. 덤프는 일반적으로 json을 인쇄하거나 API처럼 전송하는 데 사용됩니다. – Soviut

+1

@data_garden 'json.dumps'가 정상적으로 작동하고 있습니다. 문제는 누락 된','입니다. 이를 막기위한 한 가지 방법은 목록의 모든 데이터를 수집하고 마지막에만 파일에 기록하는 것입니다. 이를 위해'json.dump (...)'또는'f.write (json.dumps (...))'를 사용할 수 있습니다. 물론 다른 옵션은 마지막 루프를 제외한 각 루프 반복에서 쉼표'f.write (",")를 쓰는 것입니다. – ImportanceOfBeingErnest