一、文件操作
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"}]}