day11文件操作捕獲異常作業(yè)

一、文件操作

1、基本過(guò)程:
打開(kāi)文件 --- 操作 --- 關(guān)閉文件
open:(路徑,打開(kāi)方式,encoding=編碼方式)
路徑:絕對(duì)路徑(了解),相對(duì)路徑: ./ , ../ , .../
打開(kāi)方式:r, rb,w,wb,a
注意:路徑不存在的時(shí)候,讀的形式打開(kāi)會(huì)報(bào)錯(cuò),寫(xiě)的形式打開(kāi)會(huì)自動(dòng)創(chuàng)建文件。
設(shè)置編碼方式:utf-8 , gbk
注意:如果以二進(jìn)制的方式打開(kāi)文件(rb,wb),不能設(shè)置編碼方式。

2、文件的讀和寫(xiě):

read()、readline() -- 讀
write() -- 寫(xiě)

jison是由特定格式的一種文本形式,他有自己的語(yǔ)法

jidon 文件就是后綴.json的文本文件

#json 格式對(duì)應(yīng)的數(shù)據(jù)類(lèi)型及其表現(xiàn)
#一個(gè)json文件總只能存一個(gè)數(shù)據(jù),這個(gè)數(shù)據(jù)的類(lèi)型必須是一下類(lèi)型中的一個(gè)

#對(duì)象(cbject)  {相當(dāng)于Python中的字典
#數(shù)組(array)  [任意類(lèi)型]
#數(shù)字(number)
#字符串(string) " abc"
#布爾
#null

lood(json文件對(duì)象):以json格式,獲取文件內(nèi)容.將內(nèi)容轉(zhuǎn)換成相應(yīng)的Python數(shù)據(jù)

 if  __name__ == '__main__':
     with open('./filse/json1.json','r',encoding='utf-8') as f:
         content = json.load(f)
         print (content)
     print(type(content))

        #python轉(zhuǎn)json數(shù)據(jù)

python--->  json
字典        對(duì)象
列表\元祖--->數(shù)組
dump(需要寫(xiě)人json文件中的Python數(shù)據(jù),json文件對(duì)象

3.python對(duì)json文件的支持
json ---> python
對(duì)象 ---> 字典
數(shù)組 ---> 列表
數(shù)字 ---> 整數(shù)、浮點(diǎn)數(shù)
true,false ---> 布爾(True,F(xiàn)alse)
null ---> None

'''
python---> json
字典-----------------> 對(duì)象 
列表,數(shù)組 -----------> 數(shù)組
整數(shù)、浮點(diǎn)數(shù) ---------> 數(shù)字
布爾(True,F(xiàn)alse)---> true,false
None--------------->  null 
'''
4.異常捕獲
a.程序出現(xiàn)某種異常,但是不想因?yàn)檫@個(gè)異常而讓程序崩潰。這個(gè)時(shí)候就可以使用異常捕獲機(jī)制
b.捕獲異常

1.形式一(捕獲所有異常)
try:
  需要捕獲異常的代碼塊(可能會(huì)出現(xiàn)異常的代碼塊)
except:
  出現(xiàn)異常后執(zhí)行的代碼
'''
執(zhí)行過(guò)程:依次執(zhí)行try后面的代碼塊,一旦遇到異常,就馬上執(zhí)行except后面的代碼塊。執(zhí)行完后再執(zhí)行其他的代碼。
如果try里面的代碼塊沒(méi)有異常,就不執(zhí)行except后面的代碼,而執(zhí)行其他的代碼。
'''
a = [1,2,3,5]
try:
    print(a[5])
except:
    print('捕獲到異常')
2.形式二
try:
  需要捕獲異常的代碼塊(可能會(huì)出現(xiàn)異常的代碼塊)
except 錯(cuò)誤類(lèi)型:
  出現(xiàn)異常后執(zhí)行的代碼
'''
執(zhí)行過(guò)程:依次執(zhí)行try后面的代碼塊,一旦遇到指定的異常,就馬上執(zhí)行except后面的代碼塊。執(zhí)行完后再執(zhí)行其他的代碼。
如果try里面的代碼塊沒(méi)有指定的異常,就不執(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('捕獲到異常')




#程序出現(xiàn)異常,但是不想應(yīng)為這個(gè)異常而讓程序崩潰.這個(gè)時(shí)候就可以使用異常捕獲機(jī)制

 ef
 input():
 num1 = int(input('請(qǐng)輸入一個(gè)數(shù)'))
 num2 = int(input('請(qǐng)輸入一個(gè)數(shù)'))
 print('%f/%f = %f' % (num1, num2, num1 / num2))

import pygame

作業(yè)

1.提取data.json中的數(shù)據(jù),將每條數(shù)據(jù)中的name、text、love和comment信息。并且保存到另外一個(gè)json文件中

import json
with open('./data.json','r',encoding='utf-8') as f:
    content = json.load(f)
name, text, love, comment = [],[],[],[]
for index in range(len(content['data'])):
    name.append(content['data'][index]['name'])
    text.append(content['data'][index]['text'])
    love.append(content['data'][index]['love'])
    comment.append(content['data'][index]['comment'])
info = {'name':name,'text':text,'love':love,'comment':comment}
with open('./info.json','w',encoding='utf-8') as f1:
    json.dump(info,f1)

2.統(tǒng)計(jì)data.json中comment數(shù)量超過(guò)1000的個(gè)數(shù)并且

import json
count = 0
with open('./data.json','r',encoding='utf-8') as f:
    content = json.load(f)
len1 = len(content['data'])
for index in range(len1):
    if int(content['data'][index]['comment']) > 1000:
        count += 1
print(count)
結(jié)果:
0

3.將data.json文件中所有點(diǎn)贊數(shù)(love)對(duì)應(yīng)的值超出1000的用k來(lái)表示,例如1000修改為1k, 1345修改為1.3k

import json
with open('./data.json','r',encoding='utf-8') as f:
    content = json.load(f)
for index in range(len(content['data'])):
    str1 = (str(int(content['data'][index]['love']) / 1000)+'k')
    content['data'][index]['love'] = str1
with open('./data.json','w',encoding='utf-8') as f1:
    content1 = json.dump(content,f1)

4.寫(xiě)猜數(shù)字游戲,如果輸入有誤,提示重新輸入,直達(dá)輸入正確為止。比如:輸入數(shù)字的時(shí)候沒(méi)有按要求輸入,提示重新輸入

import random
while True:
    n = random.randint(1,100)
    try:
        n1 = int(input('輸入你想猜的數(shù)字:'))
    except ValueError:
        print('輸入錯(cuò)誤!請(qǐng)重新輸入!')
        continue
    if n1 < n:
        print('小啦是不是傻!')
        continue
    elif n1 > n:
        print('大啦你吃多咯嗎?')
        continue
    elif n1 == n:
        print('恭喜你 ')
        break

5.寫(xiě)學(xué)生管理系統(tǒng)的添加學(xué)生功能(數(shù)據(jù)需要本地化),要求除了保存學(xué)生的基本信息以外還要保存學(xué)生的學(xué)號(hào),但是學(xué)號(hào)需要自動(dòng)生成,生成原則:
添加第一個(gè)學(xué)生對(duì)應(yīng)的學(xué)號(hào)是:py001
第二次添加的學(xué)生的學(xué)號(hào)是:py002
...
如果前面的學(xué)生因?yàn)楦鞣N原因被移除了,那后面添加學(xué)生的時(shí)候原則不變,就是比如上次已經(jīng)添加到py012,那么前面不管有沒(méi)有刪除情況,再次添加學(xué)生的學(xué)號(hào)是py013

import json
def add_student():
    try:
        user_name = input('請(qǐng)輸入你的名字:')
        user_age = int(input('年紀(jì):'))
        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)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容