[python] 파이썬에서 json.dump ()와 json.dumps ()의 차이점은 무엇입니까?
파이썬에서 json.dump ()와 json.dumps ()의 차이점을 찾기 위해이 공식 문서를 검색했습니다 . 파일 쓰기 옵션과 관련이 있음이 분명합니다.
그러나 그들 사이의 자세한 차이점은 무엇이며 어떤 상황에서 다른 것보다 더 많은 이점이 있습니까?
답변
문서에서 말한 것 외에 추가 할 것이 많지 않습니다. JSON을 파일 / 소켓 등으로 덤프하려면을 사용하십시오 dump()
. 문자열로만 필요한 경우 (인쇄, 파싱 등) dumps()
(덤프 문자열)을 사용하십시오
이 답변에서 Antii Haapala가 언급했듯이 ensure_ascii
행동 에는 약간의 차이가 있습니다. 이것은 주로 기본 write()
함수가 작동 하는 방식 때문이며 전체 문자열이 아닌 청크에서 작동하기 때문입니다. 이에 대한 자세한 내용은 그의 대답을 확인하십시오.
json.dump()
obj를 JSON 형식의 스트림으로 fp (.write () 지원 파일과 유사한 객체)로 직렬화
ensure_ascii가 False 인 경우 fp에 기록 된 일부 청크는 유니 코드 인스턴스 일 수 있습니다.
json.dumps()
obj를 JSON 형식의 str로 직렬화
ensure_ascii가 False이면 결과에 ASCII가 아닌 문자가 포함될 수 있으며 반환 값은 유니 코드 인스턴스 일 수 있습니다.
답변
s
take 문자열 매개 변수 가있는 함수 다른 파일 스트림을 가져옵니다.
답변
메모리 사용 및 속도
jsonstr = json.dumps(mydata)
처음 호출 하면 메모리에 데이터의 전체 사본이 작성되고 그 후에 만 file.write(jsonstr)
디스크에 작성됩니다. 따라서 이것은 더 빠른 방법이지만 저장할 데이터가 많은 경우 문제가 될 수 있습니다.
json.dump(mydata, file)
‘s’없이- 를 호출 하면 데이터가 청크에 의해 덤프되므로 새 메모리가 사용되지 않습니다. 그러나 전체 프로세스는 약 2 배 느립니다.
출처 : 나는의 소스 코드를 확인 json.dump()
하고 json.dumps()
, 또한 모두가 함께 시간을 측정 변형 테스트 time.time()
와 htop의 메모리 사용량을보고.
답변
에서 주목할만한 차이 파이썬 2는 당신이 사용하는 경우이다 ensure_ascii=False
, dump
(당신이 UTF-8없는 확장 문자와 8 비트 문자열을 사용하지 않는 한) 파일에 제대로 쓰기 UTF-8 인코딩 된 데이터를 것입니다 :
dumps
다른 한편으로 ensure_ascii=False
를 생성 할 수 있습니다 str
또는 unicode
당신이 문자열을 사용하는 어떤 종류에 따라 :
이 변환 표를 사용하여 obj를 JSON 형식의 str로 직렬화하십시오. ensure_ascii가 False이면 결과에 ASCII가 아닌 문자가 포함될 수 있으며
unicode
반환 값 은 인스턴스 일 수 있습니다 .
(강조 광산). 여전히 str
인스턴스 일 수도 있습니다.
따라서 어떤 형식이 반환되었는지 확인하지 않고을 (를) 사용하지 않고 반환 값을 사용하여 구조를 파일에 저장할 수 없습니다 unicode.encode
.
물론 이것은 8 비트 / 유니 코드 혼동이 더 이상 없기 때문에 파이썬 3에서는 더 이상 유효하지 않습니다.
에 관해서는 load
대 loads
, load
고려 전체 는 하나의 파일에서 여러 줄 바꿈 제한 JSON 문서를 읽고 사용할 수 없도록 한 JSON 문서가 될 파일을.