您好,登錄后才能下訂單哦!
小數(shù)據(jù)存儲(chǔ)
我們?cè)诰帉懘a的時(shí)候,經(jīng)常會(huì)涉及到數(shù)據(jù)存儲(chǔ)的情況,如果是爬蟲得到的大數(shù)據(jù),我們會(huì)選擇使用數(shù)據(jù)庫,或者excel存儲(chǔ)。但如果只是一些小數(shù)據(jù),或者說關(guān)聯(lián)性較強(qiáng)且存在存儲(chǔ)后復(fù)用的數(shù)據(jù),我們?cè)撊绾未鎯?chǔ)呢?
使用open保存文本
最簡(jiǎn)單、粗暴+無腦的存儲(chǔ)方式就是保存成一個(gè)文本文檔了。
使用open函數(shù),將結(jié)果一行行的保存成文本,這里涉及的知識(shí)點(diǎn)只有簡(jiǎn)單的幾條:
文件讀寫模式,r 、w、a、b、+ ,掌握這幾種即可。
使用單獨(dú)的open打開文件時(shí),需要注意結(jié)尾時(shí)的調(diào)用close()函數(shù)關(guān)閉文檔
csv文件
之所以將csv與excel分開說,首先需要掃盲下,csv屬于特定格式的文本文件(使用逗號(hào)分隔),而excel是二進(jìn)制文件。
csv可以直接使用文本編輯器打開,excel不行…
其實(shí)csv文件,完全可以使用open函數(shù)進(jìn)行保存,只要你將每行數(shù)據(jù)都使用,分隔開即可。
另外,python自帶csv庫,可以很方便的操作與保存該數(shù)據(jù)
xml文件
xml文件的方式,已經(jīng)逐漸被淘汰了,為什么這么說?因?yàn)樗爆嵉臉湫谓Y(jié)構(gòu),導(dǎo)致了在傳輸過程中,占用了更多的內(nèi)存。所以,除非必要,真的不推薦以xml的形式存儲(chǔ)你的數(shù)據(jù)…
configparser
python模塊中configparser是一個(gè)專門用來保存配置文件的模塊庫,它非常適合保存一些具有關(guān)聯(lián)性的數(shù)據(jù)內(nèi)容,尤其是配置文件。通過定義section的方式,在section中添加key:value的方式,可以直觀明了的數(shù)據(jù)內(nèi)容。我之前專門寫了一篇關(guān)于它的文章,會(huì)附在公眾號(hào)的字文章中,喜歡的朋友可以去看看。
pyyaml
yaml類型的文件已經(jīng)成為很多Linux下的主流配置文件類型,比如Docker、Ansible等等都在使用yaml,但它依然不是一個(gè)主流的數(shù)據(jù)存儲(chǔ)方式,因?yàn)閥aml本身的格式要求太過嚴(yán)苛,比結(jié)構(gòu)化的Python格式更為嚴(yán)格,喜歡的朋友可以去研究下…
pickle
pickle模塊的使用面很窄,但不得不說還是有些人會(huì)使用,所以簡(jiǎn)單說些它的優(yōu)劣:
優(yōu)勢(shì):接口簡(jiǎn)單(與json相似);存儲(chǔ)格式通用型,及在Windows、Linux等平臺(tái)下通用;二進(jìn)制存儲(chǔ),效率高
劣勢(shì):pickle是python特定的協(xié)議,其他語言無法使用;pickle存在安全性,這個(gè)要著重說下,看下圖
Json文件
說了上面那么多,壓軸的還是Json!
首先相對(duì)于xml,現(xiàn)在更多的網(wǎng)站在數(shù)據(jù)傳輸中使用json格式,因?yàn)橥鹊淖止?jié)下,json傳輸數(shù)據(jù)的效率要更高于xml。
對(duì)于configparser,configparser有一個(gè)巨大的劣勢(shì),在于配置文件只能支持二維,section下定義option(key:value),如果想在option的value中再次定義列表、字典等數(shù)據(jù)類型,它只能識(shí)別為字符串,你需要將str手動(dòng)再轉(zhuǎn)化為對(duì)應(yīng)的數(shù)據(jù)類型
而針對(duì)ymal,json沒有那么嚴(yán)格的格式要求,寫做一行還是換行展示都隨你,沒有那么嚴(yán)苛的要求。
最后對(duì)比pickle,json格式是各種編程語言通用的數(shù)據(jù)格式,由于是key value的鍵值對(duì),不存在loads之后的安全問題。而且你學(xué)會(huì)了json,也就學(xué)會(huì)了pickle,因?yàn)槎叩氖褂梅绞揭幻粯影。?/p>
三分鐘學(xué)會(huì)Json
1.簡(jiǎn)介
JSON(JavaScript Object Notation, JS 對(duì)象簡(jiǎn)譜) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于 ECMAScript (歐洲計(jì)算機(jī)協(xié)會(huì)制定的js規(guī)范)的一個(gè)子集,采用完全獨(dú)立于編程語言的文本格式來存儲(chǔ)和表示數(shù)據(jù)。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得 JSON 成為理想的數(shù)據(jù)交換語言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,并有效地提升網(wǎng)絡(luò)傳輸效率。
至于推薦使用Json的理由:
Json格式是一種通用的數(shù)據(jù)類型
Python內(nèi)置json模塊,便于操作
json格式類似于python的dict
json的保存與讀取極為方便
2.類型、語法說明
看到上圖的Python與json對(duì)比關(guān)系,其實(shí)差異并不大,我們只需要注意幾點(diǎn)即可:
3.json的方法
即:帶s的方法是數(shù)據(jù)類型間的轉(zhuǎn)化str <--> dict,不帶s的都是數(shù)據(jù)與文件的轉(zhuǎn)化
4.實(shí)例說明
在演示前,我們需要先定義一個(gè)初始化數(shù)據(jù):
data = {
"in_use": True,
"info": {
"name_cn": 'Python',
"name_en": "BreezePython",
},
"contents": ["Python", "Java", "Linux"]
}
5.dumps() .loads()
'''
遇到問題沒人解答?小編創(chuàng)建了一個(gè)Python學(xué)習(xí)交流QQ群:857662006
尋找有志同道合的小伙伴,互幫互助,群里還有不錯(cuò)的視頻學(xué)習(xí)教程和PDF電子書!
'''
import json
json.dumps(data)
>>> '{"in_use": true, "info": {"name_cn": "\\u6e05\\u98cePython", "name_en": "BreezePython"}, "contents": ["Python", "Java", "Linux"]}'
#這里大家看到一個(gè)問題,中文異常,此時(shí)我們需要添加參數(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就比較簡(jiǎn)單了...
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))
# 保存了文本,我們?cè)谕ㄟ^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']}
看到這里,你是否發(fā)現(xiàn),即便不會(huì)dump和load我們一樣可以使用dumps和loads替換前兩者,完成讀寫操作。三分鐘學(xué)會(huì)了json的操作,并且買一送一附帶學(xué)會(huì)了pickle的操作。你是否get到?
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。