文件操作
1.數(shù)據(jù)本地化和數(shù)據(jù)持久化
通過文件將數(shù)據(jù)存到硬盤中
2.文件內(nèi)容操作
基本步驟:打開文件 --> 操作文件(讀/寫)--> 關(guān)閉文件
2.1打開文件
open(file,mode,encoding=None) --以指定方式打開指定文件辞嗡,并返回被打開的 文件對象
file --需要打開的文件路徑,傳參時實參為字符串格式,需要用引號括起來
? ./ --當前文件所在目錄(可以省略)
? ../ --當前文件所在目錄的上層目錄
mode --表示打開方式,傳參時實參為字符串格式,需要用引號括起來
? r --默認值侵蒙,以讀的方式打開文件(只能進行讀操作)
? w --以寫的方式打開文件(只能進行寫操作),會覆蓋原文件內(nèi)容
? a --以寫的方式打開文件(只能進行寫操作)傅蹂,在原文件內(nèi)容后追加
? rb/br --以讀的方式打開文件(只能進行讀操作)纷闺,讀出來的內(nèi)容是二進制數(shù)據(jù)
? wb/bw --以寫的方式打開文件(只能進行寫操作),將二進制數(shù)據(jù)寫入文件中
? + --以讀寫的方式打開
encoding --文本編碼方式份蝴,傳參時實參為字符串格式犁功,需要用引號括起來
? utf-8,文本編碼只針對文本文件婚夫,二進制文件不能設置編碼方式
2.2文件操作
2.2.1文件讀操作
文件對象.read(字節(jié)數(shù)) --獲取文件中讀寫位置往后字節(jié)數(shù)的內(nèi)容并返回(回車算一個字節(jié))浸卦,不寫字節(jié)數(shù)參數(shù)表示從讀寫位置開始,讀到文件結(jié)尾案糙,并且返回(初始讀寫位置默認在文件開頭)限嫌,結(jié)果類型是str
文件對象.seek(字節(jié)數(shù)) --將讀寫位置移動到指定字節(jié)數(shù)處靴庆,為0表示文件最開始的位置
文件對象.readline(字節(jié)數(shù)) --讀取當前讀寫位置所在行后字節(jié)數(shù)的內(nèi)容,若字節(jié)數(shù)為空怒医,則讀取讀寫位置到當前行末的內(nèi)容并返回炉抒,結(jié)果類型是str
文件對象.readlines(字節(jié)數(shù)) --讀取讀寫位置所在行后字節(jié)數(shù)的內(nèi)容,結(jié)果是list稚叹,且list列表的元素是每行內(nèi)容的字符串格式(加引號)焰薄。元素內(nèi)容不包含讀寫位置所在行之前的內(nèi)容。且最后的讀寫位置所在行的整行內(nèi)容都會作為元素內(nèi)容(即使不是在行末)扒袖。此時讀寫位置也會移到下行行首塞茅。若不加字節(jié)數(shù)保留為空則讀取讀寫位置所在行后到文件末尾的內(nèi)容,結(jié)果是list僚稿,且list列表的元素是每行內(nèi)容的字符串格式(加引號)凡桥,元素內(nèi)容不包含讀寫位置所在行之前的內(nèi)容。
2.2.2文件寫操作
文件對象.write(寫的內(nèi)容) --將制定內(nèi)容寫到指定文件中蚀同,根據(jù)open時mode是w還是a缅刽,來決定是覆蓋還是追加內(nèi)容。返回結(jié)果是寫入的str內(nèi)容的長度蠢络。
文件對象.writelines() --和write差不多呢衰猛。。
2.3關(guān)閉文件
文件對象.close()
注意:當打開文件的時候如果以讀的方式打開一個不存在的文件會報錯刹孔,以寫(w啡省,a)打開一個不存在的文件則不會出現(xiàn)異常,并且會自動創(chuàng)建對應的文件再打開髓霞。
2.4二進制文件的操作
2.4.1二進制操作
打開文件時mode加b參數(shù)卦睹,且encoding不能再寫utf-8了
rb --讀的時候,獲取到的是二進制數(shù)據(jù)(bytes)
wb --寫的時候要求寫入內(nèi)容類型是二進制
普通的文本文件可以通過二進制的形式去打開方库,影響只是獲取到的內(nèi)容结序,和寫進去的內(nèi)容的數(shù)據(jù)類型。
二進制文件只能以二進制形式打開(例如:圖片纵潦,視頻徐鹤,音頻等)
2.4.2二進制數(shù)據(jù)
一般二進制數(shù)據(jù)都是通過網(wǎng)絡請求獲取到,或者通過讀取本地的二進制文件來取到邀层。
將字符串轉(zhuǎn)換成二進制:
bytes(字符串返敬,編碼方式)
字符串.encode(編碼方式)
將二進制轉(zhuǎn)換成字符串:
str(二進制數(shù)據(jù),編碼方式)
二進制數(shù)據(jù).decode(編碼方式)
以上編碼方式一般都為utf-8
2.5文件上下文
with open(文件路徑寥院,打開方式劲赠,編碼方式) as 文件對象:
? 操作文件
文件操作完成后,會自動關(guān)閉
3.json
3.1json數(shù)據(jù)
滿足json格式的數(shù)據(jù)就是json數(shù)據(jù)
json格式:一個json有且只有一個數(shù)據(jù),這個數(shù)據(jù)必須滿足是json支持的數(shù)據(jù)類型
json支持的數(shù)據(jù)類型:
數(shù)字(number) --包含所有的數(shù)字(整數(shù)和小數(shù))凛澎,如:3泌绣,-4,3.14预厌,3e4
字符串(string) --只能用雙引號引起來的字符集,字符也支持轉(zhuǎn)義字符元媚,編碼字符轧叽,如"abc\n","123as"刊棕,"學習"炭晒,"\u4e00cv"
布爾(bool) --true/false,首字母都小寫
數(shù)組(array) --相當于python中的列表甥角,如['adc',123,true,[123,'123','asd']]
字典(dictionary) --相當于python中的字典网严,json字典中key值要求必須是字符串
空值 --null,相當于None
3.2使用json
解析json數(shù)據(jù)(獲取到json數(shù)據(jù)后嗤无,將json中想要的東西解析出來) --做前端開發(fā)人員的工作
構(gòu)造json數(shù)據(jù):
在python中有一個內(nèi)置庫震束,專門負責json數(shù)據(jù)的處理:json庫(import json)
- 將json數(shù)據(jù)轉(zhuǎn)換為python:
json數(shù)據(jù) python數(shù)據(jù)
number int/float
string str,可能會出現(xiàn)將雙引號變單引號
bool bool当犯,true->True,false ->False
array list
dictionary dict
空 null->None
json.loads(字符串,encoding='utf-8') --解析json數(shù)據(jù)垢村,返回json對應的python數(shù)據(jù)
字符串要求:字符串中內(nèi)容本身就是一個json數(shù)據(jù)(去掉引號后,本身就是一個json數(shù)據(jù))
- python轉(zhuǎn)json
python數(shù)據(jù) json數(shù)據(jù)
int/float number
bool bool,True -> true,False-> false
str string,將單引號變?yōu)殡p引號
list/tuple array
dict dictionary
空 None->null
json.dumps(python數(shù)據(jù)) -->將python數(shù)據(jù)轉(zhuǎn)換為對應的json數(shù)據(jù)字符串嚎卫,結(jié)果是字符串嘉栓。
- json文件操作
json.load(文件對象) --將文件對象中文件內(nèi)容轉(zhuǎn)換成python數(shù)據(jù),文件內(nèi)容必須是json數(shù)據(jù)
json.dump(python數(shù)據(jù)拓诸,文件對象) --將python數(shù)據(jù)轉(zhuǎn)換成json字符串再寫入指定文件中
4.應用
- 數(shù)據(jù)怎么本地化
數(shù)據(jù)保存在本地文件中一份
每次需要用到這個數(shù)據(jù)的時候侵佃,不是直接給值,而是從本地文件中讀取他的值
數(shù)據(jù)修改完后奠支,要將最新的數(shù)據(jù)保存在本地文件中
- 什么時候用到json文件
需要持久化的數(shù)據(jù)是字典馋辈,列表,元祖