python学习No9

这篇博客介绍了Python中的sys模块,讲解了如何使用sys.stdin、sys.stdout和sys.stderr进行输入输出操作。接着讨论了序列化和反序列化,对比了pickle和json的区别,展示了如何将数据写入文件。在异常处理部分,通过try-except语句演示了如何捕获并处理除零错误。最后,给出了一个简单的继承练习,创建了Student和Grade类,并实现了相关方法。
摘要由CSDN通过智能技术生成

sys模块

sys.stdin接受用户的输入,键盘读取输入的数据
sys.stdout 标准输出,默认控制台
sys.stderr错误输出,默认控制台n
stdin

import sys
#
s_in=sys.stdin
while True:
    y=s_in.readline()
    if y=='\n':
        break
    print(y)
sys.stdout=ope

stdout(改变控制台)

print('hello')
print('yes')
print(1/0)
print('------比较上下-----两个代码')
sys.stdout=open('stdout.txt','w',encoding='utf8')
print('hello')
print('yes')
print(1/0)

stderr

sys.stderr=open('stdout.txt','w',encoding='utf8')

print(1/0)

序列化和反序列化

序列化:将数据从内存持久化保存到硬盘的过程
反序列化:将数据将硬盘加载到内存的过程

将数据写入文件夹中
file=open('name.txt','w',encoding='utf8')
# names=['zhangsan','lisi','jack','tony']
# file.write(names)
#注释报错。由此可见,write只能写入字符串或者二进制
file.write('aaa')

将数据转换成字符串(repr/str),或者二进制可以写入文件夹。
转换成字符串可以用json更常用,区别在于json里使用“”表示字符串
转换成二进制:使用pickle

json里将数据持久的两个方法:
dumps:将数据转换成json字符串,不会将字符串保存在文件里,要保存得自己write
dump:可以直接将数据转换成json字符串的同时写入文件

#json本质就是字符串,区别在于json要用双引号表示字符串
import json
names=['zhangsan','lisi','jack']
x=json.dumps(names)#dumps将数据转换成字符串
#print(x)
file=open('names.txt','w',encoding='utf8')
file.write(x)
file.close()
names=['zhangsan','lisi','jack']
file=open('names.txt','w',encoding='utf8')
json.dump(names,file)

json的反序列也有两个方法:
loads:将json字符串加载成为python里的数据
load:读取文件,把读取的内容加载成为python里的数据

x='{"name":"zhangsan","age":18}'
p=json.loads(x)
print(p,type(p))
print(p['name'])
#load
file1=open('name.txt','r',encoding='utf8')
y=json.load(file1)
print(y)
print(y[0])
file1.close()

在这里插入图片描述

pickle

序列化:
dumps:将python数据转换成二进制
dump:将python数据转换成二进制,同时保存到指定文件

#dumps
names=['zhangsan','lisi','jieke']
b_name=pickle.dumps(names)
file=open('name.txt','wb')
file.write(b_name)#写入 的是二进制,不是纯文本
file.close()
file1=open('name.txt','rb')
x=file1.read()
y=pickle.loads(x)
print(y)
#dump
names=['zhangsan','lisi','jieke']
file2=open('names.txt','wb')
pickle.dump(names,file2)

反序列化:
loads:将二进制加载成为python数据
load:读取文件,并将文件二进制内容加载成为python

#利用load读取
file2=open('names.txt','wb')
pickle.dump(names,file2)
file2.close()
file3=open('names.txt','rb')
y=pickle.load(file3)
print(y)
#原封不动保存
class Dog(object):
    def __init__(self,name,color):
        self.name=name
        self.color=color
    def eat(self):
        print(self.name+'正在吃东西')
d=Dog('大黄','黄色')
#保存到文件里
pickle.dump(d,open('dog.txt','wb'))
#从文件里加载出来
a=pickle.load(open('dog.txt','rb'))
a.eat()
print(a.name,a.color)

pickle和json使用的区别

pickle用来将数据原封不动转换为二进制,但是这个二进制只能用python识别。
json只能保存一部分信息,作用是在不同的平台里传递数据,储存的是基本的数据类型

程序的异常处理

如下代码就是异常代码,除数不能为0,报错是程序对代码的健壮性,就像人的痛感,实际也是一种保护机制。

def div(a,b):
    return a/b
x=div(5,0)
x+=3
print(x)

避免程序报错崩的做法:(异常处理的模式)

try…except 语句来处理程序运行的异常

def div(a,b):
    return a/b
try:
    x=div(5,0)
    print('aaaaa')#出错此行就不打印
except Exception as e:
    print("程序出错了")
else:
    print(x)

继承小练习

有一个学生类Student属性:学号姓名年龄性别成绩,班级类,方法:查看班级中学生信息,查看指定学号学生信息,查看班级中成绩不及格学生信息,将班级中学生按照成绩降序排列。

class Student(object):
    def __init__(self,number,name,age,gender,score):
        self.name=name
        self.number=number
        self.age=age
        self.gender=gender
        self.score=score

    def __str__(self):
        return ('编号:{},性别:{},年龄:{},性别:{},分数:{}'.format(self.number, self.name, self.age, self.gender, self.score))

class Grade(object):
    def __init__(self,name,students):
        self.name=name
        self.students=students
    def show_all(self):
        for student in self.students:
            print(student)


    def failed_students(self):
        result=filter(lambda student:student.score<60,self.students)
        for x in result:
            print(x)
    def order_students(self):
        self.students.sort(key=lambda s:s.score,reverse=True)
s1=Student(1,'张三',18,'male',80)
s2=Student(3,'ll',18,'male',99)
s3=Student(10,'tony',90,'male',89)
s4=Student(7,'jack',23,'famle',77)
s5=Student(25,'jerry',90,'famle',56)
g=Grade('大一2班',[s1,s2,s3,s4,s5])
g.show_all()
print()
g.failed_students()
print()

g.order_students()
for student in g.students:
    print(student)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值