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 異常類型