Python基础八(集合、文件操作)
一、集合
集合特性:
1、集合是无序、且不重复的
2、集合里面的元素必须是可哈希的(即不可变的数据类型int、str、tuple),但是集合本身是不可哈希的
3、集合里面的元素不能更改
4、集合可以求交集、并集、反交集、差集
去重:
1, 用算法去做.
2, 转换成集合.在转换过来.
一、集合的创建
set1 = set({1,2,'alex'})
set1 = {'alex','wusir','ritian','egon','barry'}
二、集合增
set1 = {'alex','wusir','ritian','egon','barry'} add 添加一个元素 set1.add('景女神') print(set1) #update 迭代着添加 set1.update('abc') set1.update([1,2,3]) print(set1)-----{1, 2, 3, 'b', 'ritian', 'c', 'barry', 'alex', 'a', 'egon', 'wusir'}
三、集合删
按照元素去删除 set1.remove('ritian') print(set1) 随机删除 pop set1.pop() print(set1)
清空集合 clear()
set1.clear()
print(set1)---set()
删除 集合
del set1
print(set1)---报错
四、集合查
查:----使用for循环 for i in set1: print(i)
二、集合的其他操作
2、1交集 ( &、 intersection)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} set3 = set1 & set2 print(set3) print(set1.intersection(set2)) 输出{4,5}
2、 2 并集 ( | 、 union )
print(set1 | set2) print(set1.union(set2))
输出{1, 2, 3, 4, 5, 6, 7, 8}
2、 3 反交集 (^ 或者 symmetric_difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 ^ set2) # {1, 2, 3, 6, 7, 8} print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
2 、4 差集 (— 或者 difference)
set1 = {1,2,3,4,5} set2 = {4,5,6,7,8} print(set1 - set2) # {1, 2, 3} print(set1.difference(set2)) # {1, 2, 3}
2、5 超集、子集
子集 < issubset
超集 > issuperset
set1 = {1,2,3}
set2 = {1,2,3,4,5,6} print(set1 < set2) print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。
返回Ture
print(set2 > set1) print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
返回Ture
2、 6 frozenset
不可变集合,让集合变成不可变类型
s2 = frozenset(set1) print(s2,type(s2)) 输出 frozenset({1, 2, 3}) <class 'frozenset'>
三、文件操作
3、1 文件操作基本流程
f = open('C:\\Users\\Administrator\\Desktop\\new.txt',encoding='utf-8',mode='r') #open 他是windows系统的命令 #r:只读 # f 变量:f f_obj,obj,file_hl file_hanlder 文件句柄 #通过对文件句柄的操作,来得到你想要的东西. content = f.read() print(content) #f.close 将你这文件句柄,或者是动作关闭,节省内存 f.close()
3、2 读
C:\\Users\\Administrator\\Desktop\\new.txt 绝对路径
相对路径:同一个文件夹下的文件就是相对路径
r
rb一般用在非文字类型的文件:图片,视频
文件的下载和上传的功能用b模式
f = open('log','r',encoding='utf-8') content = f.read() print(content,type(content)) f.close() ----相对路径
四、文件的打开模式
文件句柄 f = open(‘文件路径’,‘模式’)
#1. 打开文件的模式有(默认为文本模式): r ,只读模式【默认模式,文件必须存在,不存在则抛出异常】 w,只写模式【不可读;不存在则创建;存在则清空内容】 a, 只追加写模式【不可读;不存在则创建;存在则只追加内容】 #2. 对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式) rb wb ab 注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 #3,‘+’模式(就是增加了一个功能) r+, 读写【可读,可写】 w+,写读【可写,可读】 a+, 写读【可写,可读】 #4,以bytes类型操作的读写,写读,写读模式 r+b, 读写【可读,可写】 w+b,写读【可写,可读】 a+b, 写读【可写,可读】
只读的 5种模式
1、f.read()全部读出来
2、f.read(n)---n(代表只读取前n个)
f = open('log',mode='r',encoding='utf-8') content = f.read(3) # r 模式:n 是按照字符读取 print(content) f.close()
f = open('log',mode='rb')
content = f.read(5) # rb 模式:n 是按照字节读取
print(content)
f.close()
# bytes ---> str
s = b'\xe4\xb8\xb0\xe5\x8e'.decode('utf-8')
print(s)
3、f.readline() 按行读
f = open('log',encoding='utf-8') line = f.readline() print(line) line1 = f.readline() print(line1) f.close()
4、f.readlines() 每一行作为一个元素,放在列表中
f = open('log',encoding='utf-8') lines = f.readlines() print(lines) f.close()
5、推荐方式 循环读取 for 循环
f = open('log',encoding='utf-8') for i in f: print(i) f.close()
写 w
如果没有文件,则创建文件写内容,如果有文件则将原文件内容全部删除再写
f = open('log','w',encoding='utf-8') f.write('Alex是sb') f.close() f = open('log1','w',encoding='utf-8') f.write('Alex依然是sb') f.close()
追加 a ab
追加在后面
f = open('log','a',encoding='utf-8') f.write('wusir紧跟其后') f.close()
r + 读 写
r+ r+b f = open('log','r+',encoding='utf-8') print(f.read()) f.write('fdsaf') f.close()
w + 写读 w+b
f = open('log','w+',encoding='utf-8') f.write('aaaa') f.seek(0) #移动光标 print(f.read()) f.close()
a + 追加可读
f = open('log','a+',encoding='utf-8') f.write('aaaa') f.tell() print(f.tell()) f.seek(2) # print(f.readable()) # print(f.read()) f.close()
f = open('log',encoding='utf-8') f.seek(3) #按照字节调整 print(f.read()) f.close()
f = open('log','a',encoding='utf-8') f.truncate(3) #截取 截取前面的内容 f.close()
常用方法
read readline readlines for循环 seek tell write writeable
ps:with open()----as -----不用close()用同一个with可以操作多个文件句柄
with open('log','r',encoding='utf-8') as f1,\ open('log1','r',encoding='utf-8') as f2: print(f1.read()) print(f2.read())
四、文件改动
过程:
1、创建一个新文件
2、读取文件
3、将原文件的内容通过你想要的方式进行更改,并写入新文件.
4、将原文件删除
5、将新文件重命名为原文件名
#1,创建一个新文件. #2,读取原文件. import os with open('log',encoding='utf-8') as f1,\ open('log.bak','w',encoding='utf-8') as f2: # 3,将原文件的内容通过你想要的方式进行更改,并写入新文件. old_content = f1.read() new_content = old_content.replace('alex','SB') f2.write(new_content) #4,将原文件删除. os.remove('log') #5,将新文件重命名原文件名. os.rename('log.bak','log') import os with open('log',encoding='utf-8') as f1,\ open('log.bak','w',encoding='utf-8') as f2: # 3,将原文件的内容通过你想要的方式进行更改,并写入新文件件. for i in f1: i = i.replace('alex','SB') f2.write(i) #4,将原文件删除. os.remove('log') #5,将新文件重命名原文件名. os.rename('log.bak','log')