今日内容概要:
一、集合的关系运算与常用操作(了解)
二、文件操作(重点)
内容详解:
一、集合的关系运算与常用操作
1、关系运算
firends1 = {"zero", "kevin", "jason", "egon"} firends2 = {"jy", "ricky", "jason", "egon"} # 1、取二者的共同好友:交集 # res = firends1 & firends2 # print(res)#{'egon', 'jason'} # 2、取二者所有的好有有哪些:并集 # res=firends1 | firends2 # print(res)#{'ricky', 'egon', 'jason', 'zero', 'kevin', 'jy'} # 3、取第一个人独有的好友:差集 # res=firends1 - firends2 # print(res)#{'zero', 'kevin'} # # res=firends2 - firends1 # print(res)#{'jy', 'ricky'} # 4、求两个用户独有的好友们(即去掉共有的好友):对称差集/交叉补集 # res1=firends1 - firends2 # res2=firends2 - firends1 # print(res1 | res2) #{'kevin', 'jy', 'ricky', 'zero'} # # print(firends1 ^ firends2)#{'jy', 'ricky', 'zero', 'kevin'} # 5、父子集:一个集合包含另外一个集合,他们才有父子集的关系 # s1 = {1, 2, 3} # s2 = {3, 4, 5} # # print(s1 > s2) # False # print(s1 < s2) # False # print(s1 == s2) # False # 集合1>集合2 结果True时,意味着集合1内的元素完全包含了集合2 # s1={1,2,3} # s2={1,2} # # print(s1 > s2) # 结果True,代表s1是s2的父集 # print(s2 < s1) # 结果True,代表s2是s1的子集 # # # s1 = {1, 2, 3} # s2 = {3, 2, 1} # print(s1 == s2)# 结果True
2、常用操作与内置方法
# s1 = {3, 2, 1} # for item in s1: # print(item) s1 = {3333, "aaa", 222, "bbb", 111} # # 1、s1.update() # print(id(s1))#36529088 # s1.update({3,4,5}) # print(s1)#{3, 4, 3333, 5, 111, 'aaa', 222, 'bbb'} # print(id(s1))#36529088 # 2、s1.clear() # 3、s1.pop() # res=s1.pop() # 随机删除,把蛋取走 # print(s1)#随机删除一位后的结果 # print(res)#返回删除的那个值 # 4、s1.remove() # 只是删除,捏碎了 # s1 = {3333, "aaa", 222, "bbb", 111} # res = s1.remove(3333) # print(s1)#{'aaa', 111, 'bbb', 222} # print(res)#None # 5、s1.discard() # 与s1.remove一样都是指定元素删除,不一样的是??? # s1 = {3333, "aaa", 222, "bbb", 111} # res=s1.discard(3333) # print(s1)#{'bbb', 111, 'aaa', 222} # print(res)#None # 不一样的地方:当删除的元素不存在时,s1.discard不会报错 # s1.discard(555555) # s1.remove(555555) # 指定元素不存在则报错 # s1.add() s1 = {3333, "aaa", 222, "bbb", 111} s1.add(555555555) print(s1)#{555555555, 3333, 'aaa', 111, 'bbb', 222} # s1.isdisjoint(s2) # 如果s1与s2没有共同的元素则返回True s1={1,2,3} s2={4,5} print(s1.isdisjoint(s2))#True
二、文件操作
1、什么是文件
文件是操作系统提供给用户/应用程序操作硬盘的一个虚拟单位/功能
应用程序/用户对文件的读写操作都是在向操作系统发起系统调用
操作系统接收到调用请求后,会将该请求转换成具体的硬盘操作
2、为何要用文件
应用程序操作文件为了将内存中的数据永久保存到硬盘中去
3、如何操作文件
(1)文件的基本操作
文件的路径:找到文件的地址
绝对路径:r'C:ac ew.txt'
相对路径:相对于当前程序所在文件夹往后找,r"aaa/a.txt"
f = open(r"aaa/a.txt", mode='rt', encoding='utf-8') data=f.read() print(data) f.close() # 释放操作系统资源
(2)文件的模式
(2.1) 控制文件读写内容的模式(不能单独使用,必须与r w a结合使用)
t:(默认的)
1、读写内容都是以字符串为单位
2、只适用于文本文件
3、必须指定encoding参数
b:
1、读写内容都是以bytes为单位
2、适用于所有文件
3、一定不能指定encoding参数
(2.2) 控制文件读写操作的模式
r:(默认的)
1、只读模式
2、当文件不存在时则报错
3、当文件存在时文件指针跳到文件开头
f = open('b.txt', mode='rt', encoding='utf-8') data = f.read() print(data)#依次读出b.txt里所有内容 f.close()
w:
1、只写模式
2、当文件不存在会创建一个空文件,然后文件指针跳到文件开头
3、当文件存在时文件内容会被清空,然后文件指针跳到文件开头
f = open('m.txt', mode='wt', encoding='utf-8') name = input('>>: ') f.write(name) f.write("egon ") f.write("张三 ") f.write("李四 ") f.write("王五 ") f.write("赵铁蛋 ") f.write("张全蛋 ") f.close()#文件内容:》输入的内容 加上 egon 张三 李四 王五 赵铁蛋 张全蛋 ,如果执行后不输入内容,文件还是为空,必须要输入内容后后续的内容才能依次写出
a:
1、只追加模式
2、当文件不存在会创建一个空文件,然后文件指针跳到文件末尾
3、当文件存在时文件内容不会被清空,文件指针跳到文件末尾
f = open('d.txt',mode='at',encoding='utf-8') f.write('aaa ') f.write('bbb ') f.write('ccc ') f.close()#在原有文件内容基础上依次写入
w与a模式的相同点
在文件打开了没有被关闭的情况下,连续的写入,新写入的内容总是跟在老内容之后
w与a模式的不同点
在文件关闭了重新打开的情况下,a模式永远把文件指针放到文件末尾
4、案例
案例一:编写一个用户注册功能,注册的内容是账号名和名
name = input("请输入您的账号>>:").strip() pwd = input("请输入您的密码>>:").strip() # 账号密码合法性校验 f = open('db.txt',mode='at',encoding='utf8') f.write("%s:%s " %(name,pwd)) f.close()
案例二:编写一个用户验证功能,账号密码来自于文件
inp_name = input("请输入您的账号>>:").strip() in_pwd = input("请输入您的密码>>:").strip() # 打开文件,读取账号密码与用户输入的账号密码进行比对 f = open('db.txt', mode='rt', encoding='utf-8') for line in f: # print(line) # "egon:123 " name, pwd = line.strip(" ").split(':') if inp_name == name and in_pwd == pwd: print('登录成功') break else: print('账号密码输入错误') f.close()