JSON 데이터를 파일에 쓰려면 어떻게 해야 하나요?
에 저장되어 있는 는 어떻게 요?data
일에에? 츠요시
f = open('data.json', 'wb')
f.write(data)
그러면 다음 오류가 발생합니다.
TypeError: 문자열 또는 버퍼여야 하며, dict는 사용할 수 없습니다.
data
는 Python 딕셔너리입니다.JSON을 사용하다
최대 호환성을 위해 사용합니다(Python 2 및 3).
import json
with open('data.json', 'w') as f:
json.dump(data, f)
최신 시스템(예: Python 3 및 UTF-8 지원)에서는 다음을 사용하여 더 좋은 파일을 쓸 수 있습니다.
import json
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False, indent=4)
메뉴얼을 참조해 주세요.
Python 2에 대해 승인된 응답에 asciii 인코딩된 파일이 아닌 utf8 인코딩된 파일을 가져오려면 다음을 사용합니다.
import io, json
with io.open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
이 코드는 Python 3에서 더 심플합니다.
import json
with open('data.txt', 'w') as f:
json.dump(data, f, ensure_ascii=False)
에서는, 의 경우는,encoding='utf-8'
합니다.open
여전히 필요합니다.
, 의 순서에 .dumps
) 및 Python 2와 3 모두에서 utf8 인코딩된 테스트링을 출력하려면 다음 명령을 사용합니다.
import json, codecs
with open('data.txt', 'wb') as f:
json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
codecs.getwriter
은 Python 하지만 Python 2Python 3에서는 합니다.
가독성 및 크기:
「 」의 ensure_ascii=False
:더 읽기 쉽고 작은 사이즈를 제공한다.가독성이향상되고 사이즈가 작아집니다.
>>> json.dumps({'price': '€10'})
'{"price": "\\u20ac10"}'
>>> json.dumps({'price': '€10'}, ensure_ascii=False)
'{"price": "€10"}'
>>> len(json.dumps({'абвгд': 1}))
37
>>> len(json.dumps({'абвгд': 1}, ensure_ascii=False).encode('utf8'))
17
또한 추가하여가독성 향상 플래그를 플래그를 추가하여 가독성을 높이다.indent=4, sort_keys=True
(dinos66에 의해 제안된) 의 주장에 대해dump
★★★★★★★★★★★★★★★★★」dumps
. 이런 방법으로 그json 파일에 약간 더 큰 파일 크기의 비용으로 꼼꼼하게 들쭉날쭉한 정렬된 구조물이 완성될 것이다.이렇게 하면 파일 크기를 조금 더 크게 하여 json 파일에 잘 들여쓰기된 정렬된 구조를 얻을 수 있습니다.
나는 앞에서 언급한 대답에 약간의 수정이와 함께 할 수 있고 인간의 눈 더 읽을 수 있는prettified JSON파일을 쓰는 것이다이라고 대답할 것이다.저는조금 수정해서 대답하겠습니다.그것은 인간의 눈이 더 잘 읽을 수 있는 예쁜 JSON파일을쓰는 것입니다.이를 위해,이 경우 패스 패스sort_keys
~하듯이로True
★★★★★★★★★★★★★★★★★」indent
4우주 관련 캐릭터와 함께 가기 좋다.4개의 공백수 있습니다 사용할 문자를.또한 ascii 코드 당신의 JSON파일에 쓰여지지 않을 것을 보장하는: 돌본다.또한 아스키 코드가 JSON기록되지 않도록 주의하십시오 파일에.
with open('data.txt', 'w') as out_file:
json.dump(json_data, out_file, sort_keys = True, indent = 4,
ensure_ascii = False)
Python 2+3으로 JSON 파일 읽기 및 쓰기, Unicode와 연동
# -*- coding: utf-8 -*-
import json
# Make it work for Python 2+3 and with Unicode
import io
try:
to_unicode = unicode
except NameError:
to_unicode = str
# Define data
data = {'a list': [1, 42, 3.141, 1337, 'help', u'€'],
'a string': 'bla',
'another dict': {'foo': 'bar',
'key': 'value',
'the answer': 42}}
# Write JSON file
with io.open('data.json', 'w', encoding='utf8') as outfile:
str_ = json.dumps(data,
indent=4, sort_keys=True,
separators=(',', ': '), ensure_ascii=False)
outfile.write(to_unicode(str_))
# Read JSON file
with open('data.json') as data_file:
data_loaded = json.load(data_file)
print(data == data_loaded)
의 파라미터 설명:
indent
새로운 것이라 맹세( 그렇지 않으면 전부 한줄에 있게 될 것이다), 시작된다:현재 각 항목을 너는 반드시 띄워 썰.:각 엔트리를 들여쓰려면 4개의공백을 사용합니다 4공간을 사용합니다.예를 들어, 새로운 dict가 기동되었을 때(그렇지 않으면 모든 것이 한 줄에 있게 됩니다.sort_keys
: 전 : : : : : : : : : : : 。이것은 json 파일을 다른 툴과 비교하거나 버전 관리 하에 둘 때 유용합니다.separators
: 이 후행 을 하지 않도록 Python 。
패키지 포함
매우 심플하고 기억하기 쉬운 유틸리티 패키지를 참조하십시오.
import mpu.io
data = mpu.io.read('example.json')
mpu.io.write('example.json', data)
JSON 파일 생성
{
"a list":[
1,
42,
3.141,
1337,
"help",
"€"
],
"a string":"bla",
"another dict":{
"foo":"bar",
"key":"value",
"the answer":42
}
}
공통 파일 끝
.json
대체 수단
- CSV: 매우 심플한 포맷(읽기와 쓰기)
- JSON: 사람이 읽을 수 있는 데이터 쓰기에 최적. 매우 일반적으로 사용(읽기 및 쓰기)
- YAML: YAML은 JSON의 슈퍼셋이지만 읽기 쉬움(읽기 및 쓰기, JSON과 YAML의 비교)
- 피클: Python 시리얼라이제이션 포맷(읽기 & 쓰기)
- MessagePack(Python 패키지):보다 콤팩트한 표시(읽기 및 쓰기)
- HDF5(Python 패키지):매트릭스(읽기 및 쓰기)에 최적
- XML: 너무 *sigh* (읽고 쓰기)
사용하시는 어플리케이션에서는 다음 사항이 중요할 수 있습니다.
- 다른 프로그래밍 언어 지원
- 읽기/쓰기 성능
- 콤팩트성(파일 크기)
다음 항목도 참조하십시오.데이터 시리얼화 포맷 비교
컨피규레이션파일을 만드는 방법을 찾고 있는 경우, 저의 짧은 기사 Configuration files in Python을 읽어보시기 바랍니다.
저와 같은 그리스어나 다른 "기타적인" 언어를 덤프하려고 하지만 peace 심볼(\u262E)과 같은 이상한 문자나 트위터 등의 json 형식의 데이터에 자주 포함된 다른 문자로 인해 문제(유니코드 오류)가 발생하는 경우 해결 방법은 다음과 같습니다(sort_keys는 분명히 옵션임).
import codecs, json
with codecs.open('data.json', 'w', 'utf8') as f:
f.write(json.dumps(data, sort_keys = True, ensure_ascii=False))
코멘트를 추가할 만한 평판이 없기 때문에, 귀찮은 TypeError에 관한 조사 결과를 여기에 적어 둡니다.
본적, 각엔 의 합니다.json.dump()
Python 2에서만 기능 - ASC가 아닌 Python(사전/목록) 데이터를 덤프할 수 없습니다.II 문자, 파일을 열어도encoding = 'utf-8'
이 있어도(즉, 무엇을 하든 상관없습니다.렇지 but but , but 。json.dumps()
는 Python 3 합니다.
2의 .Python 2는 예외입니다.Python 2는 Python 2입니다.TypeError: must be unicode, not str
if, if, if, if.data
에는 ASC 의 ASC II가 포함되어 있습니다2.II: (Python 2.7.6, Debian):
import json
data = {u'\u0430\u0431\u0432\u0433\u0434': 1} #{u'абвгд': 1}
with open('data.txt', 'w') as outfile:
json.dump(data, outfile)
그러나 Python 3에서는 정상적으로 동작합니다.
사용된 JSON use json.dump() 또는 json.dump()를 사용하여 데이터를 파일에 씁니다.데이터를 파일로 저장하기 위해 이렇게 씁니다.
import json
data = [1,2,3,4,5]
with open('no.txt', 'w') as txtfile:
json.dump(data, txtfile)
목록의 이 예는 파일에 저장됩니다.
json.dump(data, open('data.txt', 'wb'))
JSON에 들여쓰기를 하려면 , 「예쁜 인쇄」를 실시합니다.
import json
outfile = open('data.json')
json.dump(data, outfile, indent=4)
JSON을 할 가 있어, 메세지가 는, 「JSON」을 사용해 .import simplejson
import json
(동일해야 한다)
위의 답변은 모두 정답입니다.다음은 매우 간단한 예입니다.
#! /usr/bin/env python
import json
def write_json():
# create a dictionary
student_data = {"students":[]}
#create a list
data_holder = student_data["students"]
# just a counter
counter = 0
#loop through if you have multiple items..
while counter < 3:
data_holder.append({'id':counter})
data_holder.append({'room':counter})
counter += 1
#write the file
file_path='/tmp/student_data.json'
with open(file_path, 'w') as outfile:
print("writing file to: ",file_path)
# HERE IS WHERE THE MAGIC HAPPENS
json.dump(student_data, outfile)
outfile.close()
print("done")
write_json()
만약 당신이 json 포맷을 사용하여 팬더 데이터 프레임을 파일에 쓰려고 한다면 나는 이것을 추천한다.
destination='filepath'
saveFile = open(destination, 'w')
saveFile.write(df.to_json())
saveFile.close()
JSON 데이터는 다음과 같이 파일에 쓸 수 있습니다.
hist1 = [{'val_loss': [0.5139984398465246],
'val_acc': [0.8002029867684085],
'loss': [0.593220705309384],
'acc': [0.7687131817929321]},
{'val_loss': [0.46456472964199463],
'val_acc': [0.8173602046780344],
'loss': [0.4932038113037539],
'acc': [0.8063946213802453]}]
파일에 쓰기:
with open('text1.json', 'w') as f:
json.dump(hist1, f)
인정된 답변은 괜찮습니다.그러나 그것을 사용했을 때, 「is not json serializable」에러가 발생했습니다.
이렇게 수정했습니다.open("file-name.json", 'w')
출력:
output.write(str(response))
작성한 json 파일에는 큰따옴표가 없기 때문에 좋은 수정은 아니지만, 빠르고 더러운 파일을 찾고 있다면 좋습니다.
사전을 json으로 파일에 쓰기 전에 다음 명령을 사용하여 dit를 json 문자열로 설정해야 합니다.json
도서관.
import json
data = {
"field1":{
"a": 10,
"b": 20,
},
"field2":{
"c": 30,
"d": 40,
},
}
json_data = json.dumps(json_data)
또한 json 데이터에 들여쓰기를 추가하여 더 예뻐 보일 수 있습니다.
json_data = json.dumps(json_data, indent=4)
json으로 변환하기 전에 키를 정렬하려면
json_data = json.dumps(json_data, sort_keys=True)
이 두 가지를 조합해서 사용할 수도 있습니다.
기타 기능에 대해서는, 여기를 참조해 주세요.
마지막으로 json 파일에 쓸 수 있습니다.
f = open('data.json', 'wb')
f.write(json_data)
이것은, 의 사용법에 대한 추가 힌트에 지나지 않습니다.json.dumps
(이것은 질문에 대한 답변이 아니라 numpy 데이터 유형을 덤프해야 하는 사용자를 위한 트릭입니다).
NumPy NumPy 데이터형은 NumPy 입니다.json.dumps()
추가 파라미터가 필요합니다.credits는 TypeError로 이동합니다.유형 'ndarray' 오브젝트는 JSON을 시리얼화할 수 없습니다.또, 다음과 같은 에러도 수정됩니다.TypeError: Object of type int64 is not JSON serializable
타타 :
class NumpyEncoder(json.JSONEncoder):
""" Special json encoder for np types """
def default(self, obj):
if isinstance(obj, (np.int_, np.intc, np.intp, np.int8,
np.int16, np.int32, np.int64, np.uint8,
np.uint16, np.uint32, np.uint64)):
return int(obj)
elif isinstance(obj, (np.float_, np.float16, np.float32,
np.float64)):
return float(obj)
elif isinstance(obj, (np.ndarray,)):
return obj.tolist()
return json.JSONEncoder.default(self, obj)
그런 다음 다음을 실행합니다.
import json
#print(json.dumps(my_data[:2], indent=4, cls=NumpyEncoder)))
with open(my_dir+'/my_filename.json', 'w') as f:
json.dumps(my_data, indent=4, cls=NumpyEncoder)))
또한 배열은 행에 분산된 목록으로 인쇄되므로 np.array()의 경우 목록 대신 문자열을 반환할 수도 있습니다.이 경우 배열이 크거나 많은 경우 출력이 중단됩니다.경고: 덤프된 사전에서 나중에 항목을 원래 배열로 되돌리는 것이 더 어렵습니다.그러나 배열의 문자열만 가지고도 괜찮다면 사전을 더 잘 읽을 수 있습니다.그 후 교환:
elif isinstance(obj, (np.ndarray,)):
return obj.tolist()
포함:
elif isinstance(obj, (np.ndarray,)):
return str(obj)
또는 그냥:
else:
return str(obj)
언급URL : https://stackoverflow.com/questions/12309269/how-do-i-write-json-data-to-a-file
'sourcecode' 카테고리의 다른 글
MySQL에서 foreignKey 값에 대한 관련 데이터가 있는 모든 테이블을 가져오는 방법 (0) | 2022.09.23 |
---|---|
Mac OS X에서 PHP를 업그레이드하는 방법은 무엇입니까? (0) | 2022.09.23 |
JVM이 사용하고 있는 키스토어를 확인하려면 어떻게 해야 합니까? (0) | 2022.09.23 |
f-string의 newline '\n'을 사용하여 Python 3.6에서 출력을 포맷하는 방법은 무엇입니까? (0) | 2022.09.23 |
MariaDB에서 MySQL로의 이행 (0) | 2022.09.23 |