中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中小數據存儲方式有哪些

發布時間:2020-08-05 09:59:33 來源:億速云 閱讀:180 作者:清晨 欄目:編程語言

這篇文章將為大家詳細講解有關Python中小數據存儲方式有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

小數據存儲

我們在編寫代碼的時候,經常會涉及到數據存儲的情況,如果是爬蟲得到的大數據,我們會選擇使用數據庫,或者excel存儲。但如果只是一些小數據,或者說關聯性較強且存在存儲后復用的數據,我們該如何存儲呢?

使用open保存文本

最簡單、粗暴+無腦的存儲方式就是保存成一個文本文檔了。

使用open函數,將結果一行行的保存成文本,這里涉及的知識點只有簡單的幾條:

·文件讀寫模式,r 、w、a、b、+,掌握這幾種即可。

·使用單獨的open打開文件時,需要注意結尾時的調用close()函數關閉文檔。

·推薦使用上下文管理器的with open操作。

csv文件

之所以將csv與excel分開說,首先需要掃盲下,csv屬于特定格式的文本文件(使用逗號分隔),而excel是二進制文件。

csv可以直接使用文本編輯器打開,excel不行。

其實csv文件,完全可以使用open函數進行保存,只要你將每行數據都使用,分隔開即可。

另外,python自帶csv庫,可以很方便的操作與保存該數據。

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存在安全性,這個要著重說下,看下圖:

Python中小數據存儲方式有哪些

pickle安全性

Json文件

說了上面那么多,壓軸的還是Json!

首先相對于xml,現在更多的網站在數據傳輸中使用json格式,因為同等的字節下,json傳輸數據的效率要更高于xml。

Python中小數據存儲方式有哪些

對于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的保存與讀取極為方便

·學習成本低,3分鐘包教包會

2.類型、語法說明

Python中小數據存儲方式有哪些

看到上圖的Python與json對比關系,其實差異并不大,我們只需要注意幾點即可:

·json的數據為key:value,且以逗號分隔,但注意json使用雙引號包裹鍵值對

·花括號中保存為對象,而方括號保存的是數組,不論python是list還是tuple,最終都會轉化為數組

·json由于是js引申的數據類型,所以在布爾表達式與空值上,使用與python不同,需要注意

3.json的方法

·dump():將python對象序列化到一個文件,是文本文件,相當于將序列化后的json字符寫到一個文件

·load():從文件反序列表出python對象

·json和pickle相同,都只有四個方法:

·dumps():將python對象編碼為json的字符串

·loads():將字符串編碼為一個python對象

即:帶s的方法是數據類型間的轉化str <--> dict,不帶s的都是數據與文件的轉化。

4.實例說明

在演示前,我們需要先定義一個初始化數據:

data = {
    "in_use": True,
    "info": {
        "name_cn": 'Python',
        "name_en": "BreezePython",
    },
    "contents": ["Python", "Java", "Linux"]
}

5.dumps() .loads()

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']}

關于Python中小數據存儲方式有哪些就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹰潭市| 南岸区| 岑巩县| 余姚市| 正宁县| 花莲市| 集安市| 中超| 岳阳县| 乾安县| 新兴县| 嘉荫县| 施秉县| 南安市| 焉耆| 锡林浩特市| 玉田县| 汉川市| 页游| 辽阳县| 韶关市| 临湘市| 县级市| 瑞金市| 浦江县| 定远县| 新昌县| 灵寿县| 扎囊县| 剑河县| 大悟县| 昔阳县| 洛隆县| 兰溪市| 龙胜| 额敏县| 和平区| 济源市| 舞钢市| 黔西| 洞头县|