2018-09-03 day11文件操作和異常捕獲

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ò)了")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末触趴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子仇祭,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異嘁信,居然都是意外死亡携御,警方通過(guò)查閱死者的電腦和手機(jī)誓军,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門谜酒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)她肯,“玉大人,你說(shuō)我怎么就攤上這事鹰贵∏绨保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵碉输,是天一觀的道長(zhǎng)籽前。 經(jīng)常有香客問(wèn)我,道長(zhǎng)敷钾,這世上最難降的妖魔是什么枝哄? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮阻荒,結(jié)果婚禮上挠锥,老公的妹妹穿的比我還像新娘。我一直安慰自己侨赡,他們只是感情好蓖租,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著羊壹,像睡著了一般蓖宦。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上油猫,一...
    開(kāi)封第一講書(shū)人閱讀 52,874評(píng)論 1 314
  • 那天稠茂,我揣著相機(jī)與錄音,去河邊找鬼情妖。 笑死睬关,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的鲫售。 我是一名探鬼主播共螺,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼情竹!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起匀哄,我...
    開(kāi)封第一講書(shū)人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤秦效,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后涎嚼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體阱州,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年法梯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了苔货。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片犀概。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖夜惭,靈堂內(nèi)的尸體忽然破棺而出姻灶,到底是詐尸還是另有隱情,我是刑警寧澤诈茧,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布产喉,位于F島的核電站,受9級(jí)特大地震影響敢会,放射性物質(zhì)發(fā)生泄漏曾沈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一鸥昏、第九天 我趴在偏房一處隱蔽的房頂上張望塞俱。 院中可真熱鬧,春花似錦吏垮、人聲如沸障涯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)像樊。三九已至,卻和暖如春旅敷,著一層夾襖步出監(jiān)牢的瞬間生棍,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工媳谁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涂滴,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓晴音,卻偏偏與公主長(zhǎng)得像柔纵,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子锤躁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容