集合Set:
1、集合是无序的,是不重复的。
2、集合内的元素必须是可哈希的,但是集合本身是不可哈希的。
3、集合没有索引或者键值对,不能更改里面的元素。
4、集合可以求交集,并集,差集,反交集。
去重:
1、用算法 2、转化成集合,再转换回来
1 lis = [111,222,33,4,5,6,6,7]2 set1 = set(lis)3 lis = list(set1)4 print(lis)
集合的操作方法:
1,集合的创建。
1 set1 = set({1,2,'barry'})2 set2 = {1,2,'barry'}3 print(set1,set2) # {1, 2, 'barry'} {1, 2, 'barry'}
2,集合的增。
1 set1 = {'alex','wusir','ritian','egon','barry'} 2 set1.add('景女神') 3 print(set1) 4 5 #update:迭代着增加 6 set1.update('A') 7 print(set1) 8 set1.update('老师') 9 print(set1)10 set1.update([1,2,3])11 print(set1)
3,集合的删。
1 set1 = {'alex','wusir','ritian','egon','barry'} 2 3 set1.remove('alex') # 删除一个元素 4 print(set1) 5 6 set1.pop() # 随机删除一个元素 7 print(set1) 8 9 set1.clear() # 清空集合10 print(set1)11 12 del set1 # 删除集合13 print(set1)
4,集合的其他操作:
4.1 交集。(& 或者 intersection)
1 set1 = {1,2,3,4,5}2 set2 = {4,5,6,7,8}3 print(set1 & set2) # {4, 5}4 print(set1.intersection(set2)) # {4, 5}
4.2 并集。(| 或者 union)
1 set1 = {1,2,3,4,5}2 set2 = {4,5,6,7,8}3 print(set1 | set2) # {1, 2, 3, 4, 5, 6, 7}4 5 print(set2.union(set1)) # {1, 2, 3, 4, 5, 6, 7}
4.4反交集(补集)。 (^ 或者 symmetric_difference)
1 set1 = {1,2,3,4,5}2 set2 = {4,5,6,7,8}3 print(set1 ^ set2) # {1, 2, 3, 6, 7, 8}4 print(set1.symmetric_difference(set2)) # {1, 2, 3, 6, 7, 8}
4.5差集
print(set1 - set2) #set1中有而set2中没有的元素print(set1.difference(set2)) #set1中有而set2中没有的元素print(set2 - set1) #set2中有而set1中没有的元素
4.6子集与超集
1 set1 = {1,2,3}2 set2 = {1,2,3,4,5,6}3 4 print(set1 < set2)5 print(set1.issubset(set2)) # 这两个相同,都是说明set1是set2子集。6 7 print(set2 > set1)8 print(set2.issuperset(set1)) # 这两个相同,都是说明set2是set1超集。
5,frozenset不可变集合,让集合变成不可变类型。
1 s = frozenset('barry')2 print(s,type(s)) # frozenset({'a', 'y', 'b', 'r'})
文件操作
with方法,可以使程序打开后自动关闭。
with open('log','r') as f: pass
#1. 打开文件,得到文件句柄并赋值给一个变量f=open('a.txt','r',encoding='utf-8') #默认打开模式就为r#2. 通过句柄对文件进行操作data=f.read()#3. 关闭文件f.close()
PS:
错误分析:
1:unicodedecodeError:文件存储和打开的方式不一样
2:路径中含有\t,\n时需要在路径之前添加r或者用\\转义
读取文件
e:\新建文本文档.txt #绝对路径
同一个文件夹下的文件就是相对路径1 f = open('e:\新建文本文档.txt','r',encoding = 'gbk')2 data = f.read()3 print(data)4 f.close()
'r' r模式:只读模式,不写r默认就是只读
'rb'模式:一般用在非文字类的文件(图片音乐视频),不用添加编码的代码
r+模式:先读后写 r+b 先读后写(按照位的方式读取)
f = open('e:\新建文本文档.txt','r+',encoding = 'gbk')print(f.read())f.write('asdadd')f.close()
五种读取模式:
1、f.read() 全部读出来
2、f.readline() 按行读
3、f.readlines() 每一行作为一个元素放在列表中
4、 推荐方式:循环读取
f = open('e:\新建文本文档.txt','r',encoding = 'gbk')for i in f: print(i) f.close()
5、f.read(n)
r模式按照字符的数目读取
rb模式按照字节的数目读取
f = open('e:\新建文本文档.txt','r',encoding = 'gbk')content = f.read(3)print(content)f.close()
补充:bytes-->str 一个汉字3个字节,4,5个会报错
s = b'\xe4\xb8\xb0.decode(''utf - 8') print(s) #丰
写:
f.write('alex')若果没有文件,则创建文件写内容,如果有文件则将原文件删除,再写。
wb模式需要将写入的字符串.encode转换成二进制,并添加编码
str-->bytes .encode bytes-->str .decode
写读:w+先写后读 f.seek(0)光标移动到开头
追加:a ab
f = open('e:\新建文本文档.txt','a',encoding = 'gbk')f.write('3')f.close()
a+追加可读(写读) a+b
断点续传用到了tell(光标位置)和seek(n),都是按照字节去调整光标位置。
.truncate截取,按照字节去截取。(在a+或者a的模式下)
with open('log','r',encoding = 'utf-8') as f1:
print(f1.read())
方法汇总:
def close(self, *args, **kwargs): # real signature unknown 关闭文件 pass def fileno(self, *args, **kwargs): # real signature unknown 文件描述符 pass def flush(self, *args, **kwargs): # real signature unknown 刷新文件内部缓冲区 pass def isatty(self, *args, **kwargs): # real signature unknown 判断文件是否是同意tty设备 pass def read(self, *args, **kwargs): # real signature unknown 读取指定字节数据 pass def readable(self, *args, **kwargs): # real signature unknown 是否可读 pass def readline(self, *args, **kwargs): # real signature unknown 仅读取一行数据 pass def seek(self, *args, **kwargs): # real signature unknown 指定文件中指针位置 pass def seekable(self, *args, **kwargs): # real signature unknown 指针是否可操作 pass def tell(self, *args, **kwargs): # real signature unknown 获取指针位置 pass def truncate(self, *args, **kwargs): # real signature unknown 截断数据,仅保留指定之前数据 pass def writable(self, *args, **kwargs): # real signature unknown 是否可写 pass def write(self, *args, **kwargs): # real signature unknown 写内容 pass def __getstate__(self, *args, **kwargs): # real signature unknown pass def __init__(self, *args, **kwargs): # real signature unknown pass
常用方法:
read、readable、readline、readlines、for循环
seek、tell、write、writeable(判断是否可写)
改动文件:
1、创建一个新文件
2、读取原文件
3、将原文件的内容通过你想要的方式进行更改,并写入新文件。
4、将原文件删除
5、将新文件重命名
#改动文件: #1,创建一个新文件. #2,读取原文件. import os with open('log',encoding='ut open('log.bak','w',encod # 3,将原文件的内容通过你想要的方式进行更改, old_content = f1.read() new_content = old_conten f2.write(new_content) # #4,将原文件删除. os.remove('log') # #5,将新文件重命名原文件名. os.rename('log.bak','log') import os with open('log',encoding='ut open('log.bak','w',encod # 3,将原文件的内容通过你想要的方式进行更改, for i in f1: i = i.replace('alex' f2.write(i) #4,将原文件删除. os.remove('log') #5,将新文件重命名原文件名. os.rename('log.bak','log')