一.文件操作
- 備注: os庫(kù)提供了很多文件管理和操作
1 數(shù)據(jù)本地化和數(shù)據(jù)持久化
- 通過(guò)文件將數(shù)據(jù)存到硬盤中
- 數(shù)據(jù)庫(kù)文件库正,txt、json幢痘、plist、xml家破、png颜说、mp4
2 文件操作 - 文件內(nèi)容操作
- 基本步驟: 打開文件 -- 操作文件(讀/寫) -- 關(guān)閉文件
open(file, mode ,encoding=None) 购岗,以指定方式打開指定文件,并且返回被打開的文件對(duì)象
file -- 字符串 需要打開的文件的路徑
./ -- 當(dāng)前文件所在目錄(./ 可以省略)
../ -- 當(dāng)前文件所在目錄的上層目錄
mode -- 字符串 打開方式
r -- 默認(rèn)值门粪,以讀的方式打開文件(只能進(jìn)行讀操作)
w -- 以寫的方式打開文件(只能進(jìn)行寫的操作)喊积,覆蓋
a -- 以寫的方式打開文件(只能進(jìn)行寫的操作),追加
rb/br -- 以讀的方式打開文件玄妈,讀出來(lái)的內(nèi)容是二進(jìn)制數(shù)據(jù)
wb/bw -- 以寫的方式打開文件(只能進(jìn)行寫操作)乾吻,將2進(jìn)制數(shù)據(jù)寫入文件
+ -- 以讀寫的方式打開(了解)
encoding -- 文本編碼方式
utf-8
注意:文本編碼只針對(duì)文件,二進(jìn)制文件不能設(shè)置編碼方式
2.1 文件讀操作
···
文件對(duì)象.read() -- 從讀寫位置開始拟蜻,讀到文件結(jié)尾绎签,并返回
(讀寫位置默認(rèn)在文件開通)
文件對(duì)象.seek(字節(jié)數(shù)) -- 將讀寫位置移動(dòng)到指定的地方
···
- 注意:打開文件的時(shí)候,如果以讀的方式打開一個(gè)不存在的文件酝锅,會(huì)出現(xiàn)異常诡必,會(huì)出現(xiàn)異常,報(bào)錯(cuò)
- 如果以寫的方式打開一個(gè)不存在的文件搔扁,不會(huì)出現(xiàn)異常爸舒,并且會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的文件再打開
def test_r():
file = open('test.txt','r',encoding='utf-8')
str1 = 'start'
print(file.readlines())
# while str1:
# str1 =file.readline()
# print(str1,end = '')
2.2 文件寫操作
文件對(duì)象.write(寫的內(nèi)容) - 將指定內(nèi)容寫入到指定文件中,返回被寫入的內(nèi)容的長(zhǎng)度
def test_w():
file = open('test.txt','w+',encoding='utf-8')
file.write('柯基二哈稿蹲,嗷嗷哦啊哦嗷嗷')
file.seek(0)
print(file.read())
file.close() #關(guān)閉文件
3 二進(jìn)制文件操作
- rb -- 讀的時(shí)候獲取到的是二進(jìn)制數(shù)據(jù)(bytes)
- wb -- 寫的時(shí)候希爾的內(nèi)容要求類型是二進(jìn)制
- 普通的文本文件可以通過(guò)二進(jìn)制的形式打開扭勉,影響只是獲取到的內(nèi)容,和寫進(jìn)去的內(nèi)容的數(shù)據(jù)類型
- 二進(jìn)制文件只能以二進(jìn)制的形式打開
3.1二進(jìn)制數(shù)據(jù)
- 一般二進(jìn)制數(shù)據(jù)都是通過(guò)網(wǎng)絡(luò)請(qǐng)求獲取道场绿,或者通過(guò)讀取本地的二進(jìn)制文件來(lái)獲取
- 1)將字符串轉(zhuǎn)換二進(jìn)制
bytes(str,encoding="utf-8")
str.encode(編碼方式)
f1= open('test1.txt','wb+')
f1.write(bytes('阿米托福',encoding='utf-8'))
- 將二進(jìn)制轉(zhuǎn)換成字符串
str(二進(jìn)制數(shù)據(jù)剖效,編碼方式)
二進(jìn)制.decode('編碼方式’)
4. 文件上下文
with open(文件路徑,打開方式焰盗,編碼方式) as 文件對(duì)象
操作文件
文件操作完成后璧尸,會(huì)自動(dòng)關(guān)閉
with open('test1.txt','rb+') as f:
print(f.read())
二. json
1. json數(shù)據(jù)
1.1 滿足json格式的數(shù)據(jù)叫json數(shù)據(jù)
1.2 json格式:
一個(gè)json有且只有一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)必須是滿足是json支持的數(shù)據(jù)類型
1.3 json 支持的數(shù)據(jù)類型:
- 數(shù)子(number) - 包含所有的數(shù)字(整數(shù)和小數(shù)),支持科學(xué)計(jì)數(shù)法熬拒,例如:100爷光,3.12
- 字符串(string)-用雙引號(hào)括起來(lái)的字符串,字符也可以是轉(zhuǎn)義字符和
編碼字符例如:"abc"澎粟,"\n", "\u4e01" - 布爾(bool) true/false
- 數(shù)組(array) - 相當(dāng)于Python中的列表蛀序,[100,200,"abx" ,[1,2,3]]
- 字典(dictionary) - 相當(dāng)于Python中的字典
- 空值 - null , 相當(dāng)于None
2 使用json
- 解析json數(shù)據(jù)(獲取到j(luò)son數(shù)據(jù)后將json中想要的數(shù)據(jù)解析出來(lái)) -- 做前端開發(fā)人員的工作
- 在Python中有一個(gè)內(nèi)置庫(kù)活烙,專門負(fù)責(zé)json數(shù)據(jù)處理徐裸,json庫(kù)
2.1.將json數(shù)據(jù)轉(zhuǎn)換為Python數(shù)據(jù)
json數(shù)據(jù) Python數(shù)據(jù)
數(shù)字number int/float
string str,可能會(huì)出現(xiàn)將”變成'
bool bool true->True false ->False
array liset
dictionary dict
null None
import json
# ===================1.json轉(zhuǎn)Python(json數(shù)據(jù)解析)
# json.loads(str,encoding='utf-8') -- 解析json數(shù)據(jù)啸盏,返回json對(duì)應(yīng)的Python數(shù)據(jù)
# --字符串中的內(nèi)容本身就是一個(gè)json數(shù)據(jù)(去掉引號(hào)后重贺,本身就是就是一個(gè)接送數(shù)據(jù))
# result = json.loads('"abc"',encoding='utf-8')
# print(result,type(result))
# result = json.loads('100.12',encoding='utf-8')
# print(result,type(result))
# result = json.loads('true',encoding='utf-8')
# print(result,type(result))
# result = json.loads('[10,23,"yuting",true]',encoding='utf-8')
# print(result,type(result))
# result = json.loads('{"a":100,"b":flase}',encoding='utf-8')
# print(result,type(result))
with open('33.json','r',encoding='utf-8') as f:
test = json.loads(f.read(),encoding='utf-8')
# print(type(test))
2.2 python轉(zhuǎn)json
Python數(shù)據(jù) json數(shù)據(jù)
int/float number
bool True - true.False->false
str string,將單引號(hào)變成雙引號(hào)
list、tuple array
dict dictionary
空值 None ->null
- json.dumps(python數(shù)據(jù)) --》將Python數(shù)據(jù)轉(zhuǎn)換成內(nèi)容是對(duì)應(yīng)的json數(shù)據(jù)的字符串
result = json.dumps([12,'abc',[1,2],True,('a',12,4)])
print(type(result),result)
3.json文件操作
json.load(文件對(duì)象) - 將文件對(duì)象中的文件的內(nèi)容轉(zhuǎn)換成Python數(shù)據(jù)
文件的內(nèi)容只是json數(shù)據(jù)
with open('33.json','r',encoding='utf-8') as f:
result = json.load(f)
json.dump(python數(shù)據(jù),文件對(duì)象) - 將文件對(duì)象中的文件的內(nèi)容轉(zhuǎn)換成json數(shù)據(jù)
with open('44.json','r',encoding='utf-8') as f:
json.dump('abcd',f)
- 練習(xí):找json文件中favourite最高的條目
with open('33.json','r',encoding='utf-8') as f:
test = json.loads(f.read(),encoding='utf-8')
dict1 = test["data"]
dict2 = max(dict1,key= lambda x: int(x['favourite']))
print(dict2['name'], dict2['favourite'])