小數據存儲python
咱們在編寫代碼的時候,常常會涉及到數據存儲的狀況,若是是爬蟲獲得的大數據,咱們會選擇使用數據庫,或者excel存儲。但若是隻是一些小數據,或者說關聯性較強且存在存儲後複用的數據,咱們該如何存儲呢?數據庫
使用open保存文本編程
最簡單、粗暴+無腦的存儲方式就是保存成一個文本文檔了。
使用open函數,將結果一行行的保存成文本,這裏涉及的知識點只有簡單的幾條:json
文件讀寫模式,r 、w、a、b、+ ,掌握這幾種便可。數組
使用單獨的open打開文件時,須要注意結尾時的調用close()函數關閉文檔安全
csv文件網絡
之因此將csv與excel分開說,首先須要掃盲下,csv屬於特定格式的文本文件(使用逗號分隔),而excel是二進制文件。編程語言
csv能夠直接使用文本編輯器打開,excel不行…編輯器
其實csv文件,徹底可使用open函數進行保存,只要你將每行數據都使用,分隔開便可。
另外,python自帶csv庫,能夠很方便的操做與保存該數據ide
xml文件
xml文件的方式,已經逐漸被淘汰了,爲何這麼說?由於它繁瑣的樹形結構,致使了在傳輸過程當中,佔用了更多的內存。因此,除非必要,真的不推薦以xml的形式存儲你的數據…
configparser
python模塊中configparser是一個專門用來保存配置文件的模塊庫,它很是適合保存一些具備關聯性的數據內容,尤爲是配置文件。經過定義section的方式,在section中添加key:value的方式,能夠直觀明瞭的數據內容。我以前專門寫了一篇關於它的文章,會附在公衆號的字文章中,喜歡的朋友能夠去看看。
pyyaml
yaml類型的文件已經成爲不少Linux下的主流配置文件類型,好比Docker、Ansible等等都在使用yaml,但它依然不是一個主流的數據存儲方式,由於yaml自己的格式要求太過嚴苛,比結構化的Python格式更爲嚴格,喜歡的朋友能夠去研究下…
pickle
pickle模塊的使用面很窄,但不得不說仍是有些人會使用,因此簡單說些它的優劣:
優點:接口簡單(與json類似);存儲格式通用型,及在Windows、Linux等平臺下通用;二進制存儲,效率高
劣勢:pickle是python特定的協議,其餘語言沒法使用;pickle存在安全性,這個要着重說下,看下圖
Json文件
說了上面那麼多,壓軸的仍是Json!
首先相對於xml,如今更多的網站在數據傳輸中使用json格式,由於同等的字節下,json傳輸數據的效率要更高於xml。
對於configparser,configparser有一個巨大的劣勢,在於配置文件只能支持二維,section下定義option(key:value),若是想在option的value中再次定義列表、字典等數據類型,它只能識別爲字符串,你須要將str手動再轉化爲對應的數據類型
而針對ymal,json沒有那麼嚴格的格式要求,寫作一行仍是換行展現都隨你,沒有那麼嚴苛的要求。
最後對比pickle,json格式是各類編程語言通用的數據格式,因爲是key value的鍵值對,不存在loads以後的安全問題。並且你學會了json,也就學會了pickle,由於兩者的使用方式一毛同樣啊!
三分鐘學會Json
1.簡介
JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基於 ECMAScript (歐洲計算機協會制定的js規範)的一個子集,採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。
至於推薦使用Json的理由:
Json格式是一種通用的數據類型
Python內置json模塊,便於操做
json格式相似於python的dict
json的保存與讀取極爲方便
2.類型、語法說明
看到上圖的Python與json對比關係,其實差別並不大,咱們只須要注意幾點便可:
3.json的方法
即:帶s的方法是數據類型間的轉化str <--> dict,不帶s的都是數據與文件的轉化
4.實例說明
在演示前,咱們須要先定義一個初始化數據:
data = { "in_use": True, "info": { "name_cn": 'Python', "name_en": "BreezePython", }, "contents": ["Python", "Java", "Linux"] }
5.dumps() .loads()
''' 遇到問題沒人解答?小編建立了一個Python學習交流QQ羣:857662006 尋找有志同道合的小夥伴,互幫互助,羣裏還有不錯的視頻學習教程和PDF電子書! ''' import json json.dumps(data) >>> '{"in_use": true, "info": {"name_cn": "\\u6e05\\u98cePython", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}' #這裏你們看到一個問題,中文異常,此時咱們須要添加參數ensure_ascii=False json.dumps(data,ensure_ascii=False) >>> '{"in_use": true, "info": {"name_cn": "Python", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}' # 固然咱們能夠美觀的打印它 json_data = json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '),ensure_ascii=False) print(json_data) >>> { "contents": [ "Python", "Java", "Linux" ], "in_use": true, "info": { "name_cn": "Python", "name_en": "BreezePython" } } # 瞭解了dumps,loads就比較簡單了... json.loads(json_data) {'contents': ['Python', 'Java', 'Linux'], 'in_use': True, 'info': {'name_cn': 'Python', 'name_en': 'BreezePython'}}
6.dump() .load()
import json # 先來看看dump將數據保存至文本 with open('data.json', 'w', encoding='utf-8') as f: json.dump(data, f, indent=4) # 同理咱們還可使用dumps完成寫入操做 # f.write(json.dumps(data, indent=4)) # 保存了文本,咱們在經過load讀取出來 with open('data.json', 'r', encoding='utf-8') as f: data = json.load(f) # 同理咱們還可使用loads完成讀取操做 # data = json.loads(f.read()) print(data) >>> {'in_use': True, 'info': {'name_cn': 'Python', 'name_en': 'BreezePython'}, 'contents': ['Python', 'Java', 'Linux']}
看到這裏,你是否發現,即使不會dump和load咱們同樣可使用dumps和loads替換前二者,完成讀寫操做。三分鐘學會了json的操做,而且買一送一附帶學會了pickle的操做。你是否get到?