31永久存储pickle模块
一、pickle模块
0、pickle的实质是什么?
a.将对象数据以二进制形式保存在文件中
b.将对象数据以二进制形式从文件中读取
输入输出二进制流
1、使用pickle的什么方法存储数据?
pickle.dump(my_list , file_pickle)
2、使用pickle的什么方法读取数据?
my_list2 = pickle.load(file_pickle)
3、使用pickle能不能保存为”*.txt”类型的文件?
可以,后缀名可以任意指定,只不过用文本编辑器打开时,是乱码。
二、课后题
0、编写一个程序,这次要求使用pickle将文件( record.txt (1.1 KB, 下载次数: 3988) )里的对话按照以下要求腌制成不同文件(没错,是第29讲的内容小改,考考你自己能写出来吗?):
解题思路:
小甲鱼的对话单独保存为boy_.txt的文件(去掉“小甲鱼:”)
小客服的对话单独保存为girl_.txt的文件(去掉“小客服:”)
文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)
def fun2(count,boy,girl) :
name_boy = '31作业0boy_' + str(count) + '.pkl'
name_girl = '31作业0girl_' + str(count) + '.pkl'
file_boy = open(name_boy,'wb')
file_girl = open(name_girl,'wb')
pickle.dump(boy,file_boy)
pickle.dump(girl,file_girl)
file_boy.close()
file_girl.close()
import pickle
def fun1() :
file = open('31作业0record.txt','r')
boy = []
girl = []
count = 1
for i in file :
if i[:6] != '======' :
#去掉小甲鱼小客服
(name,say) = i.split(':',1)
if name == '小甲鱼':
boy.append(say)
else :
girl.append(say)
else :
#fenwenjian
fun2(count,boy,girl)
boy = []
girl = []
count += 1
fun2(count,boy,girl)
file.close()
32异常(exception)处理0
一、异常类型
见标准异常总结
33异常(exception)处理1
一、try-except 语句
1.格式:
try :
被检测的代码(检测范围)
except Exception [as reason] :
出现异常(Exception)时的处理代码
2.语句执行
try语句中的错误一旦被发现,检测范围内后面的语句不会被执行。
3.搭配
一个try语句可以和多个except语句搭配,except可以和多种异常类型搭配,处理多种异常。
try :
被检测的代码(检测范围)
except Exception1 [as reason] :
出现异常(Exception1)时的处理代码
except Exception2 [as reason] :
出现异常(Exception2)时的处理代码
4.统一处理多类异常
只要出现的括号里的异常,都会执行except后的异常处理程序。
try :
被检测的代码(检测范围)
except (Exception1, Exception2, Exception3…) as e :
出现异常(Exception1,Exception2,Exception3)时的处理代码
二、try-finally 语句
1.格式:
try:
检测范围
except 异常类型 [as e]:
对应异常的处理程序
finally:
无论如何都会执行的代码
三、raise语句
1.作用
可以手动引出异常。
2.格式:
raise 异常类型('自己输入的注释')
四、课后题
0、还记得我们额小游戏吗?只要用户输入非整形数据,程序立刻就会蹦出不和谐的异常信息然后奔溃。请使用刚学的异常处理方法修改以下程序,提高用户体验。
import random
secret = random.randint(1,10)
i = 3
while True:
try :
temp = input("猜一猜Allen心中的数字:")
number = int(temp)
break
except ValueError :
print('必须输入数字:')
while (i > 0):
if(number == secret):
print("哇,你是Allen肚里的蛔虫吗?")
print("奖励一个香吻!")
break
else:
if number > secret:
print("大了大了!")
else:
print("小了小了!")
if i > 1:
while True:
try :
temp = input("哎呀!再猜猜看:")
number = int(temp)
break
except ValueError :
print('必须输入数字:')
i = i -1
print("游戏结束,不玩啦!")
1、input()函数有可能产生两类异常:EOFError(文件末尾endoffile,当用户按下组合键Ctrl+d产生)和KeyboardInterrupt(取消输入,当用户按下组合键Ctrl+c产生),再次修改上边的代码,捕获处理input()的两类异常,提高用户体验。
import random
secret = random.randint(1,10)
i = 3
while True :
try :
temp = input("猜一猜Allen心中的数字:")
number = int(temp)
break
except (ValueError, EOFError, KeyboardInterrupt) as reason:
print('类型错误:' + str(reason))
while (i > 0):
if