1.集合的使用
列表是有序的可包含重复内容的
集合是无序的不可包含重复内容的
1) 集合关系测试
#列表去重
list_1=[1,4,5,6,7,8,9,7,5,4,23,2] #有重复数据
list_1=set(list_1)
print(list_1,type(list_1))
list_2=set([2,6,0,44,55,3,4])
print(list_1,list_2)
#交集
print(list_1.intersection(list_2))
print(list_1 & list_2) #不分先后顺序
#并集
print(list_1.union(list_2))
print(list_1 | list_2) #不分先后顺序
#差集
print(list_1.difference(list_2)) #1里有2里没有
print(list_1-list_2)
print(list_2.difference(list_1)) #2里有1里没有
print(list_2-list_1)
#子集
list_3=set([1,4,6])
print(list_3.issubset(list_1)) #3是否为1的子集
#父集
print(list_1.issuperset(list_3)) #3是否为1的父集
#对称差集
print(list_1.symmetric_difference(list_2)) #1 和2里都没有的
print(list_1 ^ list_2)
# 没有交集返回True 有交集返回False
print(list_2.isdisjoint(list_1))
2)基本操作
#添加
list_1.add(999) #单项
list_1.update([111,112,113]) #多项
#修改
list_1.update([2,3,4])
#删除
list_1.remove("999") #删除不存在的值会报错
#随机删除
list_1.pop()
#删除 传入一个数字
list_1.discard(88) #删除不存在的值不会报错
#长度
len(list_1)
#是不是成员
x in list_1 #列表 字典 字符串判断是不是在变量里都是这样写
2.文件操作
1)基本操作
#读取
#data=open("TuDiWord.py",encoding="utf-8").read()
#文件保存为对象
f=open("TuDiWord.py",encoding="utf-8") #文件句柄
data=f.read()
data2=f.read()
# linux下是按顺序输出的 window下顺序可能会乱
print(data)
print(data2)
#写
#f.write("丢火车乐队--茶底世界") #提示错误 不能写
# 写入需要指定打开模式
#r 为读模式 w为写模式 不写默认为读模式
f=open("TuDiWord.py","r",encoding="utf-8")
f.close()
# w模式打开文件为创建文件 如果以前有同名文件就会覆盖
f1=open("TuDiWord2.py","w",encoding="utf-8")
f1.write("生命中最善良的时光, ")
f1.write("就像是水一样明亮 ")
#读写都能进行的模式
#a = append 追加 不覆盖原来的文件
f1=open("TuDiWord2.py","a",encoding="utf-8")
f1.write("记忆里总有人坐在身旁, ")
f1.write("抚摸着我枯萎的肩膀 ")
#记得关闭
f1.close()
f2=open("TuDiWord2.py","r",encoding="utf-8")
#读一行
print(f2.readline())
#读前N行 例如5行
for i in range(5):
print(f2.readline())
#读整个文件
for line in f2.readlines():
print(line.strip())
#读第10行 low的写法 忘记吧
#readlines 只适合读小文件 读大文件完啦 内存死掉了
for index,line in enumerate(f2.readlines()):
if index==9:
print("我是分割线----------------")
continue
print(line.strip())
#high的写法 内存中只保存一行 效率高
#获取行号要自己搞个计数器了
count=0
for line in f2:
count+=1
if count==10:
print("分割线---------")
print(line)
#打印光标位置
print(f2.tell())
#tell计数为字符个数 不是行数
#所以 再输出f2.tell()不是2
print(f2.read(5))
print(f2.tell())
#光标移动位置
#seek()为回到字符位置
f2.seek(0)
print(f2.tell())
print(f2.readline())
f2.seek(10)
print(f2.readline())
#打印文件编码
print(f2.encoding)
#打印文件名
f2.name
#异常处理
f2.errors
#返回在内存中的编号
print(f2.fileno())
#是否为终端设备
f2.isatty()
#光标是否可移动
#atty文件移动不回去
f2.seekable()
#文件是否可读
f2.readable()
#文件是否可写
f2.writable()
#文件是否关闭
f2.closed()
#刷新 将内存中的内容写入到硬盘中
#默认是内存满的时候刷 调用可强制刷新
f2.flush()
f2.close()
#Tips 打印进度条
import sys,time
for i in range(20):
sys.stdout.write("#")
# 打印一个刷新一下 否则会20个一起打印出来
sys.stdout.flush()
time.sleep(0.1) # 休眠0.1
f3=open("TuDiWord2.py","a",encoding="utf-8")
#不写为清空
f3.truncate()
#写了数字 截取前10个字符
f3.truncate(10)
#无论光标移动到哪都是从头开始截取
f3.seek(50)
f3.truncate(100)
f3.close()
2)文件内容读写
#Tips 写读模式是先创建新文件再写内容 可覆盖文件内容 读写模式是可打开原文件在最后追加
#打开方式 r+ 既可读也可写 读写
f4=open("TuDiWord2.py","r+",encoding="utf-8")
f4.readline()
#添加的话会追加到最后
f4.write("-------------")
f4.close()
#打开方式 w+ 既可读也可写 写读
f5=open("TuDiWord2.py","w+",encoding="utf-8")
f5.write("------------1 ")
f5.write("------------2 ")
f5.write("------------3 ")
f5.write("------------4 ")
print(f5.tell())
#添加的话会修改光标后的内容
f5.seek(5)
f5.write("can i?")
f5.close()
#追加读 a+ 可读可追加
f6=open("TuDiWord2.py","a+",encoding="utf-8")
f6.write("-----------------")
f6.close()
#二进制文件 rb
#不是二进制文件也能读 但会在每行前加 “b”
#应用场景:网络传输 socket
f7=open("TuDiWord2.py","rb")
print(f7.readline())
f7.close()
#二进制写
f8=open("TuDiWord2.py","wb")
f8.write("jsiagmldrfh".encode()) #字符串转二进制
f8.close()
3) 文件内容修改
#修改文件方法
#1、把文件内容读取到内存中 修改后再写入到文件中
#2、打开一个文件修改完再重新写到一个新文件中
#文件修改实例
f9=open("TuDiWord.py","r",encoding="utf-8")
f10=open("TuDiWord2.py","w+",encoding="utf-8")
for line in f9:
if "生命中最善良的时光" in line:
line=line.replace("生命中最善良的时光","我生命中最善良的时光")
f10.write(line)
f9.close()
f10.close()
# 为避免打开文件后忘记关闭,可通过管理上下文 即:
with open("TuDiWord.py","r",encoding="utf-8") as f:
for line in f:
print(line)
#如此方式 当with代码块执行完毕时 内部会自动关闭并释放文件资源
#python2.7之后 可以同时打开 多个文件
with open("TuDiWord.py","r",encoding="utf-8") as f1,
open("TuDiWord2.py","r",encoding="utf-8") as f2:
pass
3.字符编码