2018-09-03 day11 python 文件操作和異常捕獲(含作業(yè))

1.文件操作

a.基本過程:打開文件 -操作 -關閉文件
b.open(路勁沦偎,打開方式摸吠,encoding = 編碼方式)
c.設置編碼:utf -8 ,gbk
注意:如果是以二進制的形式打開文件(rb/br,wb/bw),不能設置編碼方式
with open() as 變量名:
  文件操作
'''
文件打開操作完成后,會自動關閉文件
'''

2.Json

json是有特定格式的一種文本形式寡润,它有自己的語法
json文件就是后綴是.json的文本文件。

1.json格式對應的數(shù)據(jù)類型及其表現(xiàn)
1.1一個json文件只能存一個數(shù)據(jù)舅柜,這個數(shù)據(jù)的類型必須是以下類型中的一個梭纹。
'''
類型                                  格式                           意義
a.對象(object)                  {"a":1,"b":[1,2]}                相當于字典
b.數(shù)組(array)                    [100,"a",true]                  相當于list
c.數(shù)字(number)                       100                         包含整數(shù)和小數(shù)
d.字符串(string)                    ''abc''                       就是字符串
e.布爾                            true/false                      是/否
f.null :                         null(None)                      空值
'''
import json
'''
一:json轉(zhuǎn)python數(shù)據(jù)
1.load(json文件對象):以json的格式致份,獲取文件中的內(nèi)容变抽。將內(nèi)容轉(zhuǎn)換成相應的python數(shù)據(jù)。
2.loads(json格式內(nèi)容的字符串,編碼方式):將json格式的內(nèi)容绍载,轉(zhuǎn)換成python對應的數(shù)據(jù)太伊。
'''
二:python轉(zhuǎn)json數(shù)據(jù)
'''
1.dump(需要寫入json文件中的python數(shù)據(jù),json文件對象)
2.dumps(需要轉(zhuǎn)換成json格式字符串的python數(shù)據(jù))
'''

3.python對json文件的支持

json ---> python
對象 ---> 字典
數(shù)組 ---> 列表
數(shù)字 ---> 整數(shù)逛钻、浮點數(shù)
true,false ---> 布爾(True锰提,F(xiàn)alse)
null ---> None

'''
python---> json
字典-----------------> 對象 
列表,數(shù)組 -----------> 數(shù)組
整數(shù)曙痘、浮點數(shù) ---------> 數(shù)字
布爾(True,F(xiàn)alse)---> true立肘,false
None--------------->  null 
'''

4.異常捕獲

a.程序出現(xiàn)某種異常边坤,但是不想因為這個異常而讓程序崩潰。這個時候就可以使用異常捕獲機制
b.捕獲異常

1.形式一(捕獲所有異常)
try:
  需要捕獲異常的代碼塊(可能會出現(xiàn)異常的代碼塊)
except:
  出現(xiàn)異常后執(zhí)行的代碼
'''
執(zhí)行過程:依次執(zhí)行try后面的代碼塊谅年,一旦遇到異常茧痒,就馬上執(zhí)行except后面的代碼塊融蹂。執(zhí)行完后再執(zhí)行其他的代碼旺订。
如果try里面的代碼塊沒有異常,就不執(zhí)行except后面的代碼超燃,而執(zhí)行其他的代碼区拳。
'''
a = [1,2,3,5]
try:
    print(a[5])
except:
    print('捕獲到異常')
2.形式二
try:
  需要捕獲異常的代碼塊(可能會出現(xiàn)異常的代碼塊)
except 錯誤類型:
  出現(xiàn)異常后執(zhí)行的代碼
'''
執(zhí)行過程:依次執(zhí)行try后面的代碼塊,一旦遇到指定的異常意乓,就馬上執(zhí)行except后面的代碼塊樱调。執(zhí)行完后再執(zhí)行其他的代碼。
如果try里面的代碼塊沒有指定的異常届良,就不執(zhí)行except后面的代碼笆凌,而執(zhí)行其他的代碼
'''
a = [1,2,3,5]
try:
    print(a[5])
except IndexError:
    print('捕獲到異常')

a = [1,2,3,5]
try:
    print(a[5])
except (IndexError,KeyError):
    print('捕獲到異常')
3.形式三
try:
  需要捕獲的異常的代碼塊(可能會出現(xiàn)異常的代碼塊)
except 錯誤類型1:
  執(zhí)行語句1
except 錯誤類型2:
  執(zhí)行語句2
'''
還是只會捕獲到一個異常
'''
4.形式四
try:
  需要捕獲的異常的代碼塊(可能會出現(xiàn)異常的代碼塊)
except 錯誤類型1:
  執(zhí)行語句1
except 錯誤類型2:
  執(zhí)行語句2
finally:
  執(zhí)行語句   
'''
finally:不管有沒有異常,都會執(zhí)行finally里面的的東西士葫。
'''
def user_input():
    try:
        numb1 = float(input('請輸入除數(shù):'))
        numb2 = float(input('請輸入被除數(shù):'))
    except ValueError:
        print('輸入類型錯誤乞而,請輸入數(shù)字!为障!')
        user_input()
    test(numb1,numb2)

def test(n,y):
    try:
        print('%f / %f = %.2f' % (n,y,n/y))
    except ZeroDivisionError:
        print('被除數(shù)不能為0')
        user_input()
    finally:
        print('哈哈哈哈哈哈')
user_input()

作業(yè)

  1. 提取data.json中的數(shù)據(jù)晦闰,將每條數(shù)據(jù)中的name、text鳍怨、love和comment信息呻右。并且保存到另外一個json文件中 。
import json
info = []
with open('./data.json',encoding='utf-8') as f:
    str1 = json.load(f)
    for x in str1['data']:
        dict1 = {'name':x['name'],'text':x['text'],'love':x['love'],'comment':x['comment']}
        info.append(dict1)
with open('./data_test.json','w',encoding='utf-8') as f:
    json.dump(info,f)
data_test.png
  1. 統(tǒng)計data.json中comment數(shù)量超過1000的個數(shù)
import json
with open('./data.json',encoding='utf-8') as f:
    str1 = json.load(f)
    count  = 0
    for info in str1['data']:
       if int(info['comment']) > 1000:
           count += 1
print(count)

'''
0
'''
  1. 將data.json文件中所有點贊數(shù)(love)對應的值超出1000的用k來表示鞋喇,例如1000修改為1k, 1345修改為1.3k
import json

with open('./data.json',encoding='utf-8') as f:
    str1 = json.load(f)
    update_info = {"code": 200,"data":[]}
    for love_test in str1['data']:
        if int(love_test['love']) > 1000:
            love_num ='%.1fk'% (int(love_test['love']) / 1000)
            love_test['love'] = str(love_num)
            update_info['data'].append(love_test)
        else:
            update_info['data'].append(love_test)

with open('./new_data.json','w',encoding='utf-8') as f:
    json.dump(update_info,f)
lave_count.png
  1. 寫猜數(shù)字游戲声滥,如果輸入有誤,提示重新輸入,直達輸入正確為止落塑。比如:輸入數(shù)字的時候沒有按要求輸入纽疟,提示重新輸入
import random

numb = random.randint(1,100)
while True:
    try:
        user_input = int(input('請輸入數(shù)字:'))
    except:
        continue
    if user_input > numb:
        print('大了')
    elif user_input < numb:
        print('小了')
    else:
        print('OK')
        break
'''
請輸入數(shù)字:50
小了
請輸入數(shù)字:70
小了
請輸入數(shù)字:90
大了
請輸入數(shù)字:80
小了
請輸入數(shù)字:85
大了
請輸入數(shù)字:83
大了
請輸入數(shù)字:82
大了
請輸入數(shù)字:81
OK
'''
  1. 寫學生管理系統(tǒng)的添加學生功能(數(shù)據(jù)需要本地化),要求除了保存學生的基本信息以外還要保存學生的學號憾赁,但是學號需要自動生成污朽,生成原則:
    添加第一個學生對應的學號是:py001
    第二次添加的學生的學號是:py002
    ...
    如果前面的學生因為各種原因被移除了,那后面添加學生的時候原則不變龙考,就是比如上次已經(jīng)添加到py012,那么前面不管有沒有刪除情況蟆肆,再次添加學生的學號是py013
import json


def add_student():
    try:
        user_name = input('請輸入你的名字:')
        user_age = int(input('年紀:'))
        user_sex = input('性別:')
    except:
        add_student()

    stu = operation()

    if len(stu['student_info']) == 0:
        id = 0
    else:
        for x in stu['student_info']:
            id = x['id']
    stu_info ={'id':id+1,'name':user_name,'age':user_age,'sex':user_sex}
    stu['student_info'].append(stu_info)
    print(stu)
    main_write(stu)



def operation():
    try:
        with open('./stu_system.json','r',encoding='utf-8') as f:
            str1 = json.load(f)
            return str1
    except FileNotFoundError:
        add_sys()


def add_sys():
    with open('./stu_system.json', 'w', encoding='utf-8') as f1:
        info = {"class":"python1806","student_info":[]}
        json.dump(info,f1)
        operation()


def main_write(stu):
    with open('./stu_system.json','w',encoding='utf-8') as f:
        json.dump(stu,f)

add_student()
'''
{"class": "python1806", "student_info": [{"id": 1, "name": "txf", "age": 11, "sex": "nan"}, {"id": 2, "name": "aa", "age": 11, "sex": "bb"}]}
'''
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市晦款,隨后出現(xiàn)的幾起案子炎功,更是在濱河造成了極大的恐慌,老刑警劉巖缓溅,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛇损,死亡現(xiàn)場離奇詭異,居然都是意外死亡坛怪,警方通過查閱死者的電腦和手機淤齐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酝陈,“玉大人床玻,你說我怎么就攤上這事〕涟铮” “怎么了锈死?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵,是天一觀的道長穆壕。 經(jīng)常有香客問我待牵,道長,這世上最難降的妖魔是什么喇勋? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任缨该,我火速辦了婚禮,結(jié)果婚禮上川背,老公的妹妹穿的比我還像新娘贰拿。我一直安慰自己,他們只是感情好熄云,可當我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布膨更。 她就那樣靜靜地躺著,像睡著了一般缴允。 火紅的嫁衣襯著肌膚如雪荚守。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天,我揣著相機與錄音矗漾,去河邊找鬼锈候。 笑死,一個胖子當著我的面吹牛敞贡,可吹牛的內(nèi)容都是我干的泵琳。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼誊役,長吁一口氣:“原來是場噩夢啊……” “哼虑稼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起势木,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歌懒,沒想到半個月后啦桌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡及皂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年甫男,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片验烧。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡板驳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出碍拆,到底是詐尸還是另有隱情若治,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布感混,位于F島的核電站端幼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弧满。R本人自食惡果不足惜婆跑,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望庭呜。 院中可真熱鬧滑进,春花似錦、人聲如沸募谎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽近哟。三九已至驮审,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疯淫。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工地来, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熙掺。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓未斑,卻偏偏與公主長得像,于是被迫代替她去往敵國和親币绩。 傳聞我的和親對象是個殘疾皇子蜡秽,可洞房花燭夜當晚...
    茶點故事閱讀 45,982評論 2 361

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

  • 1.文件操作 1.基本過程:打開文件--操作--關閉文件2.open(路徑,打開方式缆镣,encoding = "編碼...
    湯姆貓是只瘋貓閱讀 194評論 0 1
  • 總結(jié) 一.文件操作 1.基本過程:打開文件 - 操作 - 關閉文件 2.open(路徑,打開方式,encoding...
    greencap閱讀 271評論 0 1
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理芽突,服務發(fā)現(xiàn),斷路器董瞻,智...
    卡卡羅2017閱讀 134,720評論 18 139
  • 是不是生命到了某一個階段寞蚌,就會變得寡言?抑或者是所謂的淡然钠糊? 清楚的知道以自己的閱歷和城府距離淡然還相距甚遠挟秤,但是...
    大浪淘沙S6閱讀 1,147評論 0 0
  • 文字保存為圖片,直接拉右下角抄伍,可以變成反的 文本框艘刚,在同一個ppt頁面,文本框外面添加任一圖形截珍,按住shift后選...
    Sophia_Liu_SH閱讀 297評論 0 0