集合
1、特点:天生去重
2、关系运算
3、基本操作(增删改查)
集合的关系运算,分为语句和符号两种:
list = set([1, 2, 3, 4, 8])
print(list, type(list))
list_2 = set([1,3,4,7,8,98,43])
list_3 = set([1,2,3,4,8,7,9])
print(list.intersection(list_2))
print(list & list_2)#交集
print(list.union(list_2))
print(list | list_2)#并集
print(list.difference(list_2))
print(list-list_2)#在list中不在list_2中
print(list_2.difference(list))
print(list_2-list)
print(list_2.issubset(list_3))
print(list2 <= list_3) #list_2是不是list_3的子集
print(list_3.issuperset(list))
print(list_3 >= list) #父集
print(list.symmetric_difference(list_3))
print(list ^ list_3)#对称差集
基本运算:增删改查
list = set([3, 5, 9, 10])
list2 = set("hello")
list.add(2)
list2.add('H')
print(list)
print(list2)
print(len(list))
print(3 in list)#测试是否是成员
print(2 not in list)
print(list.copy()) #返回一个list的浅copy
list_2 = set([0,4])
print(list.isdisjoint(list_2))#判断有没有交集,没有就返回ture
list.update([34,232,12]) #添加多项
print(list)
#删除
list.remove(2) #remove没有的元素会报错
print(list.pop()) #返回随机删除的一项
print(list.discard(23)) #需要制定要删除的元素,如果没有该元素,返回none,不会报错
文件操作
打开文件时注意编码格式
文件句柄
print顺序乱了
文件打开模式r、w、a
f.readlines 列表
for line in f.readlines():
print(line.strip())
f.readline()只适合读小文件
高级版:for line in f:
方法:
f.tell()光标的位置,按字符的个数
f.seek(0) 光标回到初始位置
f.detach() 文件编辑到一半更改文件编码格式,不需要掌握
f.encoding() 文件编码格式
f.errors 做异常用的,不需要掌握
f.fileno() 不需要掌握
f.seekable()不是所有的文件都可以seek
f.readable()
f.writeable()
f.flush() 文件读写可能没写进去,在缓存当中,(默认缓存满了刷到硬盘)不是每写一下就往硬盘上存,flush就是将缓存中的内容刷到硬盘上
sys.stdout.write() 往屏幕上输出内容,可以用for循环模拟进度条,每次都要flush,不然要等到缓存满了才刷,看不到效果
f.closed() 判断文件是否关闭
f.truncate() 什么不写就是清空,
f.truncate(10) 从文件开头开始结算
打开文件的几种常见类型:
读写:r+ 写只能从最后一行开始写,可以打开,读并且追加 (常用)
写读:w+ 创建一个文件
追加读写:a+
二进制模式读:rb ,不能有encoding参数, 运用在网络传输上(只能用二进 制模式传输)
二进制写:wb f.write("hello\n".encode()) 文件是以二进制编码的,内部处理是二进制的,但不是显示就是二进制的
自己测试了以下三个功能
1、进度条
2、光标移动
3、 r+,w+
进度条
import sys
import time
for i in range(20):
sys.stdout.write('#')
sys.stdout.flush()
time.sleep(1)
光标移动
f= open('yesterday.txt',encoding = 'utf-8')
print(f.readline())
print(f.tell())
f.seek(0)
print(f.tell())
print(f.readline())
f.close()
不同文件打开方式
尝试从头修改文件内容的时候,报编码错误,下面学习编码的时候再来解释一波
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xae in position 18: invalid start byte
搜了一下,发现应该是编码不全问题,换了其他字就好了,不能在末尾加a,很神奇
f = open('yesterday2.txt', 'r+', encoding='utf-8')
print("first:", f.readline())
print("second:", f.readline())
print("third:", f.readline())
f.write("\n3我爱北京天安门\n")
f.write("3天安门上太阳升")
print(f.tell())
f.seek(0)
f.write("\n北京欢迎你a")#有内容的情况下,不能从头写,会出现错误