>  기사  >  백엔드 개발  >  Python의 json 모듈과 피클 모듈을 사용하는 방법

Python의 json 모듈과 피클 모듈을 사용하는 방법

王林
王林앞으로
2023-05-09 15:43:14806검색

json 모듈

json은 C와 Python 등 언어 간 데이터 교환에 사용됩니다. Pickle은 Python과 Python 간의 데이터 교환에만 사용할 수 있습니다.

직렬화 및 역직렬화

객체(변수)를 메모리에서 저장 가능하거나 전송 가능한 객체로 만드는 과정을 직렬화라고 합니다. Python에서는 피클링이라고 하며 다른 언어에서는 직렬화라고도 합니다. 같은 의미. 직렬화 후에는 직렬화된 콘텐츠를 디스크에 기록하거나 네트워크를 통해 다른 시스템으로 전송할 수 있습니다. 차례로, 직렬화된 객체의 변수 내용을 메모리로 다시 읽는 것을 역직렬화, 즉 역피클링이라고 합니다.

다른 프로그래밍 언어 간에 개체를 전송하려면 개체를 XML과 같은 표준 형식으로 직렬화해야 하지만 더 좋은 방법은 JSON으로 직렬화하는 것입니다. JSON은 문자열로 표현되고 모든 언어에서 사용할 수 있기 때문입니다. ​​읽고 디스크에 쉽게 저장하거나 네트워크를 통해 전송할 수 있습니다. JSON은 표준 형식이고 XML보다 빠를 뿐만 아니라 웹 페이지에서 직접 읽을 수도 있어 매우 편리합니다.

JSON으로 표현되는 객체는 표준 JavaScript 언어 객체입니다. JSON과 Python의 내장 데이터 유형 간의 대응은 다음과 같습니다.

Python의 json 모듈과 피클 모듈을 사용하는 방법

파일에 데이터 쓰기 및 읽기 - 사전

dic =' {‘string1':'hello'}' #写文件只能写入字符串 - 手动把字典变成字符串
f = open(‘hello', ‘w')
f.write(dic)
f_read = open(‘hello', ‘r')
data = f_read.read() #从文件中读出的都是字符串
data = eval(data) #提取出字符串中的字典
print(data[‘name'])

json은 위를 구현합니다. 함수 - json을 사용할 수 있습니다. 어떤 언어로든 데이터를 전송하는 것에는 차이가 있습니다.

dic = {‘string1':'hello'}
data = json.dumps(dic)
print(data)
print(type(data)) #dumps()会把我们的变量变成一个json字符串
f = open(“new_hello”, “w”)
f.write(data)

json 문자열과 우리가 수동으로 추가하는 문자열은 json 문자열 사양을 따릅니다. 즉, 문자열이 안에 들어 있습니다. 큰 따옴표.

dumps는 우리가 전달하는 모든 데이터 유형을 큰따옴표로 묶인 문자열로 바꿉니다.

# {‘string1':'hello'} ---> “{“string1”:”hello”}”
# 8 ---> “8”
# ‘hello' ---> ““hello”” – 被json包装后的数据内部只能有双引号
#[1, 2] ---> “[1, 2]”

저장하거나 전송할 때 데이터를 json 문자열로 변환합니다. 이는 모든 언어로 구현될 수 있습니다.

f_read = open(“new_hello”, “r”)
data = json.loads(f_read.read()) #这个data直接就是字典类型
print(data)
print(type(data))

json 모듈 메서드

json.dumps() # 把数据包装成json字符串 – 序列化
json.loads() # 从json字符串中提取出原来的数据 – 反序列化

파이썬에서 l = [1, 2, 3] 목록을 json 문자열로 묶어 저장하거나 보냅니다. C 언어에서 json 구문 분석을 사용하면 해당 값을 C 언어로 가져옵니다. 데이터 구조가 추출됩니다. 배열 buf[3] = {1, 2, 3}으로.

이는 json 문자열이 json 사양을 준수하는 한 덤프와 로드를 함께 사용해야 한다는 의미는 아니며, 덤프 사용 여부는 중요하지 않습니다.

json.dump(data, f) #转换成json字符串并写入文件
#相当于 data = json.dumps(dic) + f.write(data)
data = json.load(f) #先读取文件,再提取出数据
#相当于data = json.loads(f_read.read())

예:

#----------------------------序列化
import json
dic={'name':'alvin','age':23,'sex':'male'}
print(type(dic))#<class &#39;dict&#39;>
j=json.dumps(dic)
print(type(j))#<class &#39;str&#39;>
f=open(&#39;序列化对象&#39;,&#39;w&#39;)
f.write(j)  #-------------------等价于json.dump(dic,f)
f.close()
#-----------------------------反序列化<br>
import json
f=open(&#39;序列化对象&#39;)
data=json.loads(f.read())#  等价于data=json.load(f)

참고:

import json
#dct="{&#39;1&#39;:111}"#json 不认单引号
#dct=str({"1":111})#报错,因为生成的数据还是单引号:{&#39;one&#39;: 1}
dct=&#39;{"1":"111"}&#39;
print(json.loads(dct))

데이터 생성 방법에 관계없이 json 형식만 충족하면 json.loaded할 수 있습니다. 로드하기 위해 반드시 덤프 데이터일 필요는 없습니다.

pickle 모듈

Pickle의 문제는 다른 모든 프로그래밍 언어에 특유한 직렬화 문제와 동일합니다. 즉, Python에서만 사용할 수 있으며, 서로 다른 Python 버전이 서로 호환되지 않을 수도 있다는 것입니다. 따라서 중요하지 않은 데이터만 Pickle로 저장할 수 있습니다. 데이터를 성공적으로 역직렬화할 수 없어도 상관없습니다.

##----------------------------序列化
import pickle
dic={&#39;name&#39;:&#39;alvin&#39;,&#39;age&#39;:23,&#39;sex&#39;:&#39;male&#39;}
print(type(dic))#<class &#39;dict&#39;>
j=pickle.dumps(dic)
print(type(j))#<class &#39;bytes&#39;>
f=open(&#39;序列化对象_pickle&#39;,&#39;wb&#39;)#注意是w是写入str,wb是写入bytes,j是&#39;bytes&#39;
f.write(j)  #-------------------等价于pickle.dump(dic,f)
f.close()
#-------------------------反序列化
import pickle
f=open(&#39;序列化对象_pickle&#39;,&#39;rb&#39;)
data=pickle.loads(f.read())#  等价于data=pickle.load(f)
print(data[&#39;age&#39;])

pickle과 json의 사용법은 동일합니다. 둘 다 학명은 직렬화라고 하는데, json 직렬화 결과는 문자열이고, 피클 직렬화 결과는 바이트입니다. 즉, 형태는 다르지만 내용은 동일하다. 그러나 피클에 의해 직렬화되는 것은 바이트, 즉 파일에 쓸 데이터가 바이트이므로, 파일을 열 때 반드시 해야 한다. wb 바이너리 형식으로 열립니다. pickle이 파일에 쓴 내용은 읽을 수 없지만(문자가 지저분하지만 컴퓨터는 이를 인식할 수 있음) json으로 쓴 데이터는 읽을 수 있습니다. 피클은 더 많은 데이터 유형을 지원하며 피클은 함수와 클래스를 직렬화할 수 있습니다. json은 이러한 두 가지 직렬화를 지원하지 않지만 대부분의 시나리오에서는 여전히 json이 사용됩니다.

위 내용은 Python의 json 모듈과 피클 모듈을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제