Python学习Day2笔记(集合和文件操作)

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.字符编码
原文地址:https://www.cnblogs.com/LastDance/p/6246900.html