創(chuàng)新互聯(lián)www.cdcxhl.cn八線動態(tài)BGP香港云服務(wù)器提供商,新人活動買多久送多久,劃算不套路!
成都創(chuàng)新互聯(lián)公司長期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為衡東企業(yè)提供專業(yè)的做網(wǎng)站、成都網(wǎng)站建設(shè),衡東網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。這篇文章將為大家詳細講解有關(guān)Python中小數(shù)據(jù)存儲方式有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
小數(shù)據(jù)存儲
我們在編寫代碼的時候,經(jīng)常會涉及到數(shù)據(jù)存儲的情況,如果是爬蟲得到的大數(shù)據(jù),我們會選擇使用數(shù)據(jù)庫,或者excel存儲。但如果只是一些小數(shù)據(jù),或者說關(guān)聯(lián)性較強且存在存儲后復(fù)用的數(shù)據(jù),我們該如何存儲呢?
使用open保存文本
最簡單、粗暴+無腦的存儲方式就是保存成一個文本文檔了。
使用open函數(shù),將結(jié)果一行行的保存成文本,這里涉及的知識點只有簡單的幾條:
·文件讀寫模式,r 、w、a、b、+,掌握這幾種即可。
·使用單獨的open打開文件時,需要注意結(jié)尾時的調(diào)用close()函數(shù)關(guān)閉文檔。
·推薦使用上下文管理器的with open操作。
csv文件
之所以將csv與excel分開說,首先需要掃盲下,csv屬于特定格式的文本文件(使用逗號分隔),而excel是二進制文件。
csv可以直接使用文本編輯器打開,excel不行。
其實csv文件,完全可以使用open函數(shù)進行保存,只要你將每行數(shù)據(jù)都使用,分隔開即可。
另外,python自帶csv庫,可以很方便的操作與保存該數(shù)據(jù)。
xml文件
xml文件的方式,已經(jīng)逐漸被淘汰了,為什么這么說?因為它繁瑣的樹形結(jié)構(gòu),導(dǎo)致了在傳輸過程中,占用了更多的內(nèi)存。所以,除非必要,真的不推薦以xml的形式存儲你的數(shù)據(jù)。
configparser
python模塊中configparser是一個專門用來保存配置文件的模塊庫,它非常適合保存一些具有關(guān)聯(lián)性的數(shù)據(jù)內(nèi)容,尤其是配置文件。通過定義section的方式,在section中添加key:value的方式,可以直觀明了的數(shù)據(jù)內(nèi)容。我之前專門寫了一篇關(guān)于它的文章,會附在公眾號的字文章中,喜歡的朋友可以去看看。
pyyaml
yaml類型的文件已經(jīng)成為很多Linux下的主流配置文件類型,比如Docker、Ansible等等都在使用yaml,但它依然不是一個主流的數(shù)據(jù)存儲方式,因為yaml本身的格式要求太過嚴苛,比結(jié)構(gòu)化的Python格式更為嚴格,喜歡的朋友可以去研究下。
pickle
pickle模塊的使用面很窄,但不得不說還是有些人會使用,所以簡單說些它的優(yōu)劣:
優(yōu)勢:接口簡單(與json相似);存儲格式通用型,及在Windows、Linux等平臺下通用;二進制存儲,效率高。
劣勢:pickle是python特定的協(xié)議,其他語言無法使用;pickle存在安全性,這個要著重說下,看下圖:
pickle安全性
Json文件
說了上面那么多,壓軸的還是Json!
首先相對于xml,現(xiàn)在更多的網(wǎng)站在數(shù)據(jù)傳輸中使用json格式,因為同等的字節(jié)下,json傳輸數(shù)據(jù)的效率要更高于xml。
對于configparser,configparser有一個巨大的劣勢,在于配置文件只能支持二維,section下定義option(key:value),如果想在option的value中再次定義列表、字典等數(shù)據(jù)類型,它只能識別為字符串,你需要將str手動再轉(zhuǎn)化為對應(yīng)的數(shù)據(jù)類型。
而針對ymal,json沒有那么嚴格的格式要求,寫做一行還是換行展示都隨你,沒有那么嚴苛的要求。
最后對比pickle,json格式是各種編程語言通用的數(shù)據(jù)格式,由于是key value的鍵值對,不存在loads之后的安全問題。而且你學(xué)會了json,也就學(xué)會了pickle,因為二者的使用方式一毛一樣??!
三分鐘學(xué)會Json
1.簡介
JSON(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數(shù)據(jù)交換格式。它基于 ECMAScript (歐洲計算機協(xié)會制定的js規(guī)范)的一個子集,采用完全獨立于編程語言的文本格式來存儲和表示數(shù)據(jù)。簡潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時也易于機器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。
至于推薦使用Json的理由:
·Json格式是一種通用的數(shù)據(jù)類型
·Python內(nèi)置json模塊,便于操作
·json格式類似于python的dict
·json的保存與讀取極為方便
·學(xué)習(xí)成本低,3分鐘包教包會
2.類型、語法說明
看到上圖的Python與json對比關(guān)系,其實差異并不大,我們只需要注意幾點即可:
·json的數(shù)據(jù)為key:value,且以逗號分隔,但注意json使用雙引號包裹鍵值對
·花括號中保存為對象,而方括號保存的是數(shù)組,不論python是list還是tuple,最終都會轉(zhuǎn)化為數(shù)組
·json由于是js引申的數(shù)據(jù)類型,所以在布爾表達式與空值上,使用與python不同,需要注意
3.json的方法
·dump():將python對象序列化到一個文件,是文本文件,相當(dāng)于將序列化后的json字符寫到一個文件
·load():從文件反序列表出python對象
·json和pickle相同,都只有四個方法:
·dumps():將python對象編碼為json的字符串
·loads():將字符串編碼為一個python對象
即:帶s的方法是數(shù)據(jù)類型間的轉(zhuǎn)化str <--> dict,不帶s的都是數(shù)據(jù)與文件的轉(zhuǎn)化。
4.實例說明
在演示前,我們需要先定義一個初始化數(shù)據(jù):
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"]}' #這里大家看到一個問題,中文異常,此時我們需要添加參數(shù)ensure_ascii=False json.dumps(data,ensure_ascii=False) >>> '{"in_use": true, "info": {"name_cn": "Python", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}' # 當(dāng)然我們可以美觀的打印它 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將數(shù)據(jù)保存至文本 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']}
關(guān)于Python中小數(shù)據(jù)存儲方式有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享名稱:Python中小數(shù)據(jù)存儲方式有哪些-創(chuàng)新互聯(lián)
URL鏈接:http://bm7419.com/article16/ceohgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、自適應(yīng)網(wǎng)站、手機網(wǎng)站建設(shè)、ChatGPT、建站公司、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)