1.文件操作
1.基本過(guò)程:打開(kāi)文件--操作--關(guān)閉文件
2.open(路徑锥忿,打開(kāi)方式敬鬓,encoding = "編碼方式")
a.路徑:絕對(duì)路徑(了解)钉答,相對(duì)路徑:./; ../
b.打開(kāi)方式:r,rb/br --讀仑性;w,wb/bw,a--寫
路徑不存在的時(shí)候右蹦,讀的方式打開(kāi)會(huì)報(bào)錯(cuò)晨汹,寫的方式打開(kāi)會(huì)新建文件
c.設(shè)置編碼:utf-8;gbk
注意:如果是以二進(jìn)制的形式打開(kāi)文件(rb/br,wb/bw)不能設(shè)置編碼方式
3.文件的讀和寫
read()/readline ---讀
write---寫
4關(guān)閉
f.close()
打開(kāi)文件和關(guān)閉文件的簡(jiǎn)寫方式(常用的)
with open() as 文件變量名:
文件操作
文件操作完成后,會(huì)自動(dòng)關(guān)閉文件
#讀二進(jìn)制文件(上傳文件)
with open('./files/timg.jpg','rb') as f :
#bytes是python中內(nèi)置的數(shù)據(jù)類型贷盲,用來(lái)表示二進(jìn)制數(shù)據(jù)
content = f.read()
print(type(content))
print(content)
#將二進(jìn)制數(shù)據(jù)寫入文件
with open('./files/new.jpg','wb') as f1:
f1.write(content)
2.json文件
json是有特定格式的一種文本形式淘这,它有自己的語(yǔ)法
json文件就是后綴是.json的文本文件
1.json格式對(duì)應(yīng)的數(shù)據(jù)類型及其表現(xiàn)
一個(gè)json文件中只能存一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)的類型必須是以下類型中的一個(gè)
類型: 格式: 意義:
對(duì)象(object): {"a":10,"b":[1,2]} 相當(dāng)于字典
數(shù)組(array): [100,"asd",true,[1,2]] 相當(dāng)于列表晃洒,里面的元素可以是任何類型
數(shù)字(number): 100 3.14 包含整數(shù)和小數(shù)
字符串(string): "asd","hello json"
布: true/false 是(真)/否(假)
null: null 空值
2.python對(duì)json數(shù)據(jù)的支持
json python
對(duì)象 字典(dict)
數(shù)組 列表(list)
數(shù)字 整數(shù)(int)和浮點(diǎn)型(float)
布爾/true,false 布爾(bool)/True.False
null None
json模塊是python中內(nèi)置的慨灭,專門用來(lái)處理json數(shù)據(jù)的一個(gè)模塊
1.load(json文件對(duì)象):以json的格式,獲取文件中的內(nèi)容.將內(nèi)容轉(zhuǎn)換成相應(yīng)的python數(shù)據(jù)
2.loads(json格式內(nèi)容的字符串球及,編碼方式):將json格式的字符串氧骤,轉(zhuǎn)換成python對(duì)應(yīng)的數(shù)據(jù)
3.dump(需要寫入json文件中的python數(shù)據(jù),json文件對(duì)象)
dumps(需要轉(zhuǎn)換成json格式字符串的python數(shù)據(jù))
json轉(zhuǎn)python數(shù)據(jù)
with open('./files/json1.json','r',encoding='utf-8') as f:
content = json.load(f)
print(content)
print(content["a"])
python轉(zhuǎn)json數(shù)據(jù)
python ---> json
字典 對(duì)象
列表吃引,元組 數(shù)組
將python數(shù)據(jù)筹陵,轉(zhuǎn)換成json字符串
json_str = json.dumps([2,3,4,'asd,True'])
print(json_str,type(json_str))
用json文件來(lái)保存一個(gè)班的班級(jí)信息,包括班級(jí)名和班上的所有的學(xué)生(名字,年齡,電話)
輸入學(xué)生信息添加學(xué)生
根據(jù)學(xué)生姓名刪除學(xué)生
做到數(shù)據(jù)持久化
json文件的數(shù)據(jù)格式
{
"class_name":"班級(jí)名",
"all_student":[
{"name":"名字"输涕,"age":"年齡","tel":"電話"},
{"name":"名字","age":"年齡","tel":"電話"},
{"name":"名字"界弧,"age":"年齡","tel":"電話"}
]
}
#1.讀出保存班級(jí)信息的json文件的內(nèi)容
with open("./files/class_info.json","r",encoding="utf-8") as f:
class_content = json.load(f)
name = input("姓名:")
age = input("年齡:")
tel = input("電話:")
stu = {"name":name,"age":int(age),"tel":tel}
class_content["all_students"].append(stu)
# class_info = {
# "calss_name":"python1806",
# "all_students":[
# stu
# ]
# }
#將最新的數(shù)據(jù)寫入文件中
with open("./files/class_info.json","w",encoding="utf-8") as f:
json.dump(class_content,f)
del_name = input("輸入想要?jiǎng)h除的學(xué)生姓名:")
with open("./files/class_info.json","r",encoding="utf-8") as f:
class_content = json.load(f)
for item in class_content["all_students"]:
if del_name == item["name"]:
class_content["all_students"].remove(item)
break
with open("./files/class_info.json", "w", encoding="utf-8") as f:
json.dump(class_content, f)
print(class_content)
數(shù)據(jù)的持久化
1.將數(shù)據(jù)從文件中讀出來(lái)
2.修改數(shù)據(jù)(增委煤,刪吱窝,改)
3.將新的數(shù)據(jù)再寫入文件中
3.異常捕獲
1.為什么要使用異常捕獲
異常:程序崩潰了,報(bào)錯(cuò)了...
程序出現(xiàn)異常,但是不想因?yàn)檫@個(gè)異常而讓程序崩潰,這個(gè)時(shí)候可以使用異常捕獲機(jī)制
2.怎么捕獲異常
形式1:捕獲try后代碼塊里的所有異常
try:
需要捕獲異常的代碼塊(可能會(huì)出現(xiàn)異常的代碼塊)
except:
出現(xiàn)異常后執(zhí)行代碼
執(zhí)行過(guò)程:執(zhí)行try后面的代碼塊,一旦遇到異常俺孙,就馬上執(zhí)行except后面的代碼塊
執(zhí)行完后再執(zhí)行其他語(yǔ)句
如果try里面的代碼塊沒(méi)有異常场靴,就不執(zhí)行except后面的代碼塊,而是直接執(zhí)行其他語(yǔ)句
形式2:
try:
需要捕獲異常的代碼塊(可能會(huì)出現(xiàn)異常的代碼塊)
except 錯(cuò)誤類型:
出現(xiàn)異常后執(zhí)行代碼
執(zhí)行過(guò)程:執(zhí)行try后面的代碼塊衩椒,一旦遇到指定的異常,就馬上執(zhí)行except后面的代碼塊
執(zhí)行完后再執(zhí)行其他語(yǔ)句
如果try里面的代碼塊沒(méi)有指定的異常,就不執(zhí)行except后面的代碼塊言蛇,而是直接執(zhí)行其他語(yǔ)句
c.形式3
try:
需要捕獲異常的代碼塊(可能會(huì)出現(xiàn)異常的代碼塊)
except (錯(cuò)誤類型1,錯(cuò)誤類型2....):
出現(xiàn)異常后執(zhí)行代碼
d.形式4
try:
需要捕獲異常的代碼塊(可能會(huì)出現(xiàn)異常的代碼塊)
except 錯(cuò)誤類型1:
執(zhí)行語(yǔ)句塊1
except 錯(cuò)誤類型2:
執(zhí)行語(yǔ)句塊2
....
d.形式5
try:
需要捕獲異常的代碼塊(可能會(huì)出現(xiàn)異常的代碼塊)
except:
出現(xiàn)異常后執(zhí)行代碼
finally:
不管有沒(méi)有捕獲到異常,都會(huì)執(zhí)行(就算崩潰也會(huì)執(zhí)行)
(在這做程序異常退出時(shí)的善后只估,一般做保存數(shù)據(jù)和進(jìn)度的工作)
3.拋出異常(后面補(bǔ)充)
raise 錯(cuò)誤類型
a.輸入兩個(gè)數(shù)荠医,然后求在這兩個(gè)數(shù)的商是多少
import json
num1 = float(input("除數(shù):"))
num2 = float(input("被除數(shù):"))
print("%f / %f = %f" % (num2,num1,num2/num1))
b.打開(kāi)一個(gè)不存在的文件紧显,不希望程序崩潰,只是讓讀出的內(nèi)容為空
with open("./files/info.json","r",encoding="utf-8") as f:
content = json.load(f)
try:
with open("./files/info.json", "r", encoding="utf-8") as f:
content = json.load(f)
except IndentationError:
print("文件不存在")
2.捕獲異常
#try-except
a = [1,2,3,4,5]
try:
print(int("asd"))
print(a[6])
except:
print("捕獲異常")
print("*********")
dict1 = {"a":1,"b":2}
try:
dict1["c"]
except (KeyError,IndexError):
print("錯(cuò)了")