json文件2018-10-15

1.文件操作打開關閉縮寫

with open() 打開文件縮寫
打開文件時,以'r'/'rb'讀的形式打開,如果文件不存在會報錯;以寫'w'/'a'的形式打開,文件不存在的情況下會創(chuàng)建對應文件
with open(文件路徑,打開方式,encoding=編碼方式)as 文件對象:
文件操作代碼

with open('./files/testing.txt') as f:
    f.write('how are u?\nfine,thank you.\n')

說明:這種操作,打開并執(zhí)行文件后會自動關閉該文件
編碼方式只有在文本文件時才用

2.二進制文件的讀寫

常見二進制文件:視頻文件/音頻文件/圖片/壓縮包等
注意:二進制文件讀寫不能設置文本編碼方式(不能給encoding賦值)
bytes-->字節(jié),是python專門用來表示二進制的數(shù)據(jù)類型
===============================================================

json文件

json是一種特定格式的數(shù)據(jù),主要用來在互聯(lián)網(wǎng)上做文本數(shù)據(jù)傳輸。
json數(shù)據(jù)本身是文本數(shù)據(jù),json文件就是后綴是.json的文件,文件內(nèi)容需滿足json格式要求

1.json格式

  • 一個json對應一條數(shù)據(jù)
  • json中的數(shù)據(jù)必須是json對應的數(shù)據(jù)類型
    數(shù)字類型(number)-->所有的數(shù)字,包含整數(shù)和小數(shù)。
    字符串類型(string)-->只能用雙引號""括起來的數(shù)據(jù)。
    數(shù)組(array)-->相當于python中的列表,[1,3,4,"3d"]
    字典(dictionary)-->相當于python中的字典
    布爾-->true和false(首字母是小寫不能大寫)
    null-->相當于None,用來表示空
    同理,除了int/float/string/list/dict/bool/None,其他數(shù)據(jù)無法轉(zhuǎn)為json文件

2.python對json的支持

python中專門提供了一個json模塊,用來處理json數(shù)據(jù)
import json
json.load(json文件對象)-->將json文件對象內(nèi)容讀出來,并且將內(nèi)容轉(zhuǎn)換成python對應的數(shù)據(jù)類型。要求文件內(nèi)容必須是json格式數(shù)據(jù)
json.dump(內(nèi)容,json文件路徑)-->將指定內(nèi)容以json格式寫入到json文件中
loads(json格式字符串)-->將字符串內(nèi)容是json數(shù)據(jù)的字符串轉(zhuǎn)換成python對應的數(shù)據(jù)類型
dumps(內(nèi)容)-->將指定內(nèi)容轉(zhuǎn)化成json格式的字符串

import json
content= json.loads('"abc"')
content2=json.loads('234')
print(content,type(content),content2,type(content2))

abc <class 'str'> 234 <class 'int'>

python轉(zhuǎn)json

3.dumps與dump

dumps(內(nèi)容)-->內(nèi)容是python數(shù)據(jù),返回值是一個字符串,且字符串內(nèi)容是滿足json格式的
注意:集合不能轉(zhuǎn)化為json數(shù)據(jù)

import json
str1=json.dumps([2,4,4])
print(str1,type(str1))

[2, 4, 4] <class 'str'>

dump(內(nèi)容,文件對象)-->將內(nèi)容以json格式寫入文件中

#學生管理系統(tǒng):添加學生,要求之前添加過的學生,下次執(zhí)行程序的時候還在;顯示學生信息

import json
with open('./files/student.json')as f:
    all_student=json.load(f)


def add_students():
    while True:
        global all_student

        name=input('請輸入名字:')
        age=input('請輸入年齡:')
        tel=input('請輸入電話號碼:')
        student={'name':name,'age':age,'tel':tel}
        all_student.append(student)
        with open('./files/student.json','w')as f:
            json.dump(all_student,f)
            print('添加成功!')
            print('1.繼續(xù)添加')
            print('2.返回上一層')
            value=input('請選擇1-2')
            if value==1:
                continue
            else:
                return
def show_students():
    for student in all_student:
        print(student)
while True:
    print('1.添加學生信息')
    print('2.查看學生信息')
    print('3.退出')
    value2=input('請選擇1-3:')
    if value2=='1':
        add_students()
    if value2=='2':
        show_students()
    else:
        print('退出成功!')
        break

數(shù)據(jù)本地化的過程:
使用數(shù)據(jù)的時候從本地文件中去取數(shù)據(jù),修改完數(shù)據(jù)后將新數(shù)據(jù)更新到本地文件中。

異常捕獲

報錯就是出現(xiàn)異常
出現(xiàn)異常后,不希望程序直接崩潰,而是想要自己對異常進行處理,就需要捕獲異常。

  • 格式1:(可以捕獲代碼段1中出現(xiàn)的所有異常。finally語句可不出現(xiàn),出現(xiàn)后try后代碼是否出現(xiàn)異常及有無捕獲代碼,finally后代碼段都會執(zhí)行
    try:
    需要捕獲異常的代碼段1
    except:
    出現(xiàn)異常后會執(zhí)行的代碼段2
    finally:
    總會執(zhí)行的代碼段3

  • 格式2:(捕獲指定異常類型)
    try:
    需要捕獲異常的代碼段1
    except 異常類型:
    出現(xiàn)異常后會執(zhí)行的代碼段2
    finally:
    總會執(zhí)行的代碼段3

  • 格式3:(捕獲括號中指定的所有異常類型)
    try:
    需要捕獲異常的代碼段1
    except (異常類型1,異常類型2):
    出現(xiàn)異常后會執(zhí)行的代碼段2
    finally:
    總會執(zhí)行的代碼段3

  • 格式4:
    try:
    需要捕獲異常的代碼段1
    except 異常類型1:
    出現(xiàn)異常后會執(zhí)行的代碼段2
    except 異常類型2:
    出現(xiàn)異常后會執(zhí)行的代碼段3
    ……
    finally:
    總會執(zhí)行的代碼段3

拋出異常

raise 異常類型

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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