一.集合(set)
集合:1.无序的,不重复的
2.他里面的元素必须是可哈希的. int str bool () ,但是它本身是不可哈希的.
3.集合不能更改里面的元素
4.集合可以求交集,并集,差集,反交集等.
1.集合的创建
set1 = set({1,2,'alex'})set2 = set1print(set1,set2)# 输出结果:{1, 2, 'alex'} {1, 2, 'alex'}
2.集合的增(2种方式)
1.set1.add()(直接增加)set1 = {1,3,'alex',2}# set1.add('taibai')# print(set1)# 输出结果:{1, 2, 3, 'taibai', 'alex'}2.set1.update()(迭代增加)set1.update('abc')print(set1)# 输出结果:{1, 2, 3, 'c', 'b', 'a', 'alex'}
3.集合的删(4种方式)
set1 = {1,3,'alex',2}1.set1.pop() (随机删除,所以()内不用写)set1.pop()print(set1)2.set1.remove(2) (删除元素)print(set1)3.set.clear() (清空集合)set1.clear()print(set1)输出结果:set()4.del set1(删除集合)
4.集合的查
通过for循环查找
set1 = {1,3,'alex',2}for i in set1: print(i)
5.集合的其他操作
5.1交集 ( & 或者 intersection)
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 & set2) #{4, 5}print(set1.intersection(set2))
5.2并集 ( | 或者 union)
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 | set2) #{1, 2, 3, 4, 5, 6, 7, 8}print(set1.union(set2))
5.3差集 ( - 或者 difference )
set1 = {1,2,3,4,5}set2 = {4,5,6,7,8}print(set1 - set2) #{1, 2, 3}print(set1.difference(set2))
5.4反交集 ( ^ 或者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))
5.5超集,子集
set1 = {1,2,3,4,5}set2 = {4,5}print(set1 > set2) #Trueprint(set1.issuperset(set2))print(set2 < set1) #Trueprint(set2.issubset(set1))
这两个相同,都是说明set1是set2的超集。set2是set1的子集
6.frozenset()
不可变集合,让集合变成不可变类型。
set1 = {1,2,3,4,5}s = frozenset(set1) #frozenset({1, 2, 3, 4, 5})print(s)
二.文件操作
1.文件操作基本流程
f = open('F:day8.txt',encoding='utf-8',mode='r')# 变量:f f_obj,obj,file_hl file_hanlder 文件句柄 open 他是windows系统的命令# 'F:day8.txt' 文件路径 encoding='utf-8' 编码方式 r:只读content = f.read()print(content)f.close() #将你这文件句柄,或者是动作关闭,节省内存
2.文件的打开模式
2.1读
2.1.1只读 (r,rb,r+)(5种方法)
1. f.read() 全部读出来
f = open('asdf','r',encoding='utf-8')content = f.read()print(content) #输出结果:qweasdzxcf.close()
2. f.read(n) n是按照字符读出来的个数
f = open('asdf',encoding='utf-8')content = f.read(3)print(content) #输出结果:qwef.close()
3. readline() 按行读出来,
f = open('asdf',encoding='utf-8')content = f.readline()print(content)line1 = f.readline()print(line1)f.close()
4. readlines()
f = open('asdf',encoding='utf-8')content = f.readlines()print(content) 输出结果:['中国\n', 'qweasdzxc']f.close()
5. for 循环
f = open('asdf',encoding='utf-8')for i in f: print(i) f.close()
r+ 就是先读后写,在读的基础上加上f.write() ,在关闭文件
rb对于非文本文件,我们只能使用b模式,"b"表示以字节的方式操作(而所有文件也都是以字节的形式存储的,使用这种模式无需考虑文本文件的字符编码、图片文件的jgp格式、视频文件的avi格式)
与r的区别在于 f 中不用输入encoding=' ',其中f.read(n)中n代表字节
bytes ---> str# s = b'\xe4\xb8\xb0\xe5\x8e'.decode('utf-8')2.2 写write(w , w+ ,wb)
write如果没有文件,则创建文件写内容, 如果有文件则将原文件内容全部删除,在写.
f = open('asdf','w',encoding='utf-8')content = f.write('mnbvcxy') f.close()
w+ 是先写后读,写完之后光标在最后位置,读不出来
wb 是写的bytes类型。与w的区别在于 f 中不用输入encoding=' ',其中写入的是编码类型,表现出的是对应的英文或者中文
2.3追加
只追加 a,ab
f = open('asdf','a',encoding='utf-8')content = f.write('aaaa')f.close()
ab是追加的bytes类型。与a的区别在于 f 中不用输入encoding=' ',其中写入的是编码类型,表现出的是对应的英文或者中文
追加可读 a+,a+b
f = open('asdf','a+',encoding='utf-8')content = f.write('aaaa')f.seek(0)print(f.read())f.close()
a+b是追加可读的bytes类型。与a+的区别在于 f 中不用输入encoding=' ',其中写入的是编码类型,表现出的是对应的英文或者中文
2.4文件的操作方法
常用方法:
read readable readline readlines for 循环
seek tell write writeableView Code
3.with的用法
with open('log','r',encoding='utf-8') as f1,\ open('log1','r',encoding='utf-8') as f2: print(f1.read()) print(f2.read())
4.改动文件
1)创建一个新文件.
2)读取原文件
3)将原文件的内容通过想用的方式进行更改,并写入新文件
4)将原文件删除
5)将新文件重命名为原文件名
# 1,创建一个新文件.# 2,读取原文件.import oswith 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 oswith open('log',encoding='utf-8') as f1,\ open('log.bak','w',encoding='utf-8') as f2: for i in f1: i = i.replace('alex','SB') f2.write(i)os.remove('log')os.rename('log.bak','log')