通過文件操作,我們可以將字符串寫入到一個本地文件。但是,如果是一個對象(例如列表、字典、元組等),就無
法直接寫入到一個文件里,需要對這個對象進行序列化,然后才能寫入到文件里。
設計一套協議,按照某種規則,把內存中的數據轉換為字節序列,保存到文件,這就是序列化,反之,從文件的字
節序列恢復到內存中,就是反序列化。
對象—>字節序列 === 序列化
字節序列—>對象 ===反序列化
Python中提供了JSON這個模塊用來實現數據的序列化和反序列化。
JSON模塊
JSON(JavaScriptObjectNotation, JS對象簡譜)是一種輕量級的數據交換標准。JSON的本質是字符串
使用JSON實現序列化
JSON提供了dump和dumps方法,將一個對象進行序列化。
dumps方法的作用是把對象轉換成為字符串,它本身不具備將數據寫入到文件的功能。
import json file = open('names.txt', 'w') names = ['zhangsan', 'lisi', 'wangwu', 'jerry', 'henry', 'merry', 'chris'] # file.write(names) 出錯,不能直接將列表寫入到文件里
# 可以調用 json的dumps方法,傳入一個對象參數
result = json.dumps(names)
# dumps 方法得到的結果是一個字符串
print(type(result)) # <class 'str'>
# 可以將字符串寫入到文件里
file.write(result)
file.close()
dump方法可以在將對象轉換成為字符串的同時,指定一個文件對象,把轉換后的字符串寫入到這個文件里
import json file = open('names.txt', 'w') names = ['zhangsan', 'lisi', 'wangwu', 'jerry', 'henry', 'merry', 'chris'] # dump方法可以接收一個文件參數,在將對象轉換成為字符串的同時寫入到文件里
json.dump(names, file) file.close()
使用JSON實現反序列化
使用loads和load方法,可以將一個JSON字符串反序列化成為一個Python對象。
loads方法需要一個字符串參數,用來將一個字符串加載成為Python對象
import json # 調用loads方法,傳入一個字符串,可以將這個字符串加載成為Python對象
result = json.loads('["zhangsan", "lisi", "wangwu", "jerry", "henry", "merry", "chris"]') print(type(result)) # <class 'list'>
load方法可以傳入一個文件對象,用來將一個文件對象里的數據加載成為Python對象
import json # 以可讀方式打開一個文件
file = open('names.txt', 'r') # 調用load方法,將文件里的內容加載成為一個Python對象
result = json.load(file) print(result) # ["zhangsan", "lisi", "wangwu", "jerry", "henry", "merry", "chris"]
file.close()
一些操作
# fp = open('test.txt','w') # # 默認情況我們只能將字符串寫入到文件中 # fp.write('hello world') # # fp.close()
# fp = open('test.txt','w') # # 默認情況下報錯 對象是無法寫入到文件中 如果想寫入到文件 那么必須使用序列化操作 # name_list = ['zhangsan','lisi'] # # fp.write(name_list)
-----------------------------------------------------------------------------------------
# 序列化的2種方式 # dumps # (1)創建一個文件 # fp = open('test.txt','w') # # # (2)定義一個列表 # name_list = ['zs','ls'] # # # 導入json模塊到該文件中 # import json # # 序列化 # # 將python對象 變成 json字符串 # # 我們在使用scrapy框架的時候 該框架會返回一個對象 我們要將對象寫入到文件中 就要使用json.dumps
# #操作數據 # names = json.dumps(name_list) # print(name) #['zs', 'str']
# print(type(name)) # <class 'str'> # # 將names寫入到文件中 # fp.write(names) # fp.close()
------------------------------------------------------------------------------------------
# dump # 在將對象轉換為字符串的同時,指定一個文件的對象 然后把轉換后的字符串寫入到這個文件里
# fp = open('text.txt','w') # # # # name_list = ['zs','ls'] # # # # import json # # 相當於names = json.dumps(name_list) 和 fp.write(names)
# # 操作文件
# # json.dump(name_list,fp) # # # # fp.close()
--------------------------------------------------------------------------------------------
# 反序列化 # 將json的字符串變成一個python對象
# fp = open('text.txt','r') # # content = fp.read() # # # 讀取之后 是字符串類型的 # print(content) #['zs', 'ls'] # print(type(content)) # <class 'str'> # # # loads # import json # # 將json字符串變成python對象 # 操作數據
# result = json.loads(content) # # 轉換之后 # print(result) #['zs', 'ls'] # print(type(result)) # <class 'list'>
--------------------------------------------------------------------------------------------
# load fp = open('text.txt','r') import json # 操作文件 result = json.load(fp) print(result) # ['zs', 'ls'] print(type(result)) # <calss 'list'> fp.close()