一、数字类型
1)整数 int 类型
- bit_length() # 查询以二进制表示一个数字的值所需的位数 - int.from_bytes(bytes,byteorder) # 返回给定字节数组所表示的整数。 - int.to_bytes(length,byteorder) # 返回表示整数的字节数组。
2)浮点数 float 类型
- is_integer # 如果浮点数是整数,则返回True collections:Python内建的一个集合模块,提供了许多有用的集合类。 - Counter # 是一个简单的计数器,例如,统计字符出现的个数: - OrderedDict # 可以实现一个FIFO(先进先出)的dict,当容量超出限制时,先删除最早添加的Key: - deque # 是为了高效实现插入和删除操作的双向列表,适合用于队列和栈: - defaultdict # 使用dict时,如果引用的Key不存在,就会抛出KeyError。如果希望key不存在时,返回一个默认值,就可以用defaultdict:
二、集合
1)集合的意义,使用。便于计算
pythoners = ['张大炮','李二毛','王麻子','Lina','user'] linuxers = ['wxx','sbsb','逗比','张三疯','Lina','user'] pl = [] for name in pythoners: if name in linuxers: pl.append(name) print(pl)
可以理解为2列表的交集运算。集合可以专门计算这样的类型
1)集合的运算
1、 | 合集 ==> intersection 2、 & 交集 ==> union 3、 - 差集 ==> difference 4、^ 对称差集 ==> symmetric_difference 5、>,>= 父集 ==> issuperset 6、<,<= 子集 7、 == 等于运算
8、判断是否有共同部分 ==> isdisjoint 。有False,没有Frue
pythoners = {'张大炮','李二毛','王麻子','Lina','user'} linuxers = {'wxx','sbsb','逗比','张三疯','Lina','user'} # 求交集 print(pythoners & linuxers) print(pythoners.intersection(linuxers)) # 求所有的元素,并集 print(pythoners | linuxers) print(pythoners.union(linuxers)) # 差集 print(pythoners - linuxers) print(pythoners.difference(linuxers)) # 对称差集 print(pythoners ^ linuxers) print(pythoners.symmetric_difference(linuxers)) print(len(pythoners ^ linuxers)) # 等于运算 == s1 = {1,2,3} s2 = {1,2,3} print(s1 == s2) # 父集 s1 = {1,2,3} s2 = {1,2} print(s1 >= s2) print(s1.issuperset(s2)) # 子集 print(s2 <= s1) print(s2.issubset(s1)) # 判断是否有共同部分,有False,没有true print(s1.isdisjoint(s2))
2)集合的方法
update 是否更新原数据 add 添加元素 discard 删除元素,没有返回值,不存在不报错 remove 删除元素,没有返回值,不存在报错 pop 随机删除,有返回值 clear 清空集合
s1 = {'a','b','c'} s2 = {'b','d','f'} s1.difference_update(s2) # 差集的结果赋值给了s1 print(s1) s1 = {'a','b','c'} s1.add('d') print(s1) s1.discard('aaa') # 删除,没有返回值,不存在不报错 print(s1) s1.pop() # 删除,随机删除,有返回值 s1.remove('d') # 删除,没有返回值,不存在报错 print(s1) s1 = {'a','b','c'} s2 = {'b','d','f'} s1.update({3,4,5}) print(s1) # 了解的内容 # s1.clear() # s1.isdisjoint() # s1.issubset() # s1.issuperset() # 例题,去除下面的重复的内容 names = ['user','sbsb','Lina','Lina','user'] print(list(set(names))) #小结:用集合去重,局限性很强 # 1、不能保证原数据类型的顺序 # 2、原数据中包含的元素必须全部为不可变类型
3)集合的特征
1、不可变类型 2、元素不能重复 3、无序
4)例题,去除下面列表重复的内容
l=[ {'name':'egon','age':18,'sex':'male'}, {'name':'alex','age':73,'sex':'male'}, {'name':'egon','age':20,'sex':'female'}, {'name':'egon','age':18,'sex':'male'}, {'name':'egon','age':18,'sex':'male'}, ]
l=[ {'name':'egon','age':18,'sex':'male'}, {'name':'alex','age':73,'sex':'male'}, {'name':'egon','age':20,'sex':'female'}, {'name':'egon','age':18,'sex':'male'}, {'name':'egon','age':18,'sex':'male'}, ] # 版本一 # s = set() # new_l = [] # for d in l: # values = (d['name'],d['age'],d['sex']) # #print(values) # if values not in s: # s.add(values) # new_l.append(d) # print(new_l) # 版本二 # s = [] # new_l = [] # for d in l: # if d not in s: # s.append(d) # new_l.append(d) # print(new_l) # 版本三 s = [] for d in l: if d not in s: s.append(d) print(s)
5)集合常用操作归纳 set 类型
- set1 = set({1, 2, 'barry'}) # 创建集合 - set2 = {1, 2, 'barry'} # 创建集合 - add # 将元素添加到集合中。如果元素已经存在,这不起作用。 - del set1 # 删除集合- update # 迭代增加 - clear # 删除此集合中的所有元素 - remove # 删除一个元素 - pop # 随机删除一个元素 - issubset # 子集 - issuperset # 超集 - union # 并集。(| 或者 union) - difference # 差集。(- 或者 difference) - intersection # 交集。(& 或者 intersection) - isdisjoint # 如果两个集合有一个空交点,则返回True - intersection_update # 用它自己和另一个交集更新一个集合。 - difference_update # 删除另一个集合中本集合所拥有的所有元素 - symmetric_difference # 反交集。 (^ 或者 symmetric_difference)
三、字符编码
四、文件操作
1)文件操作的关键字 open
f=open(r'D:oldboyedumanth-01day3a.txt',mode='r',encoding='utf-8') # 需要转义,前面需要加 r date = f.read() print(date) f.close() # 回收操作系统打开的文件
对一个文件操作,结束时,需要close。但这样往往会忘记写。即用下面个方法
with open(r'D:oldboyedumanth-01day3a.txt',mode='r',encoding='utf-8') as f: data = f.read() print(data) with open('a.txt',mode='r',encoding='utf-8') as f, open('set1.py',mode='r',encoding='utf-8') as f1: data = f.read() print(data)
2)文件的读模式 r
with open('a.txt',mode='r',encoding='utf-8') as f: # print('第一次 ',f.read()) # read一次性把文件读取完,指针已经指向了文件末尾 # print('第二次', f.read()) # print(f.readline(),end='') # 一行一行的读取 # print(f.readline(),end='') for line in f: print(line,end='') # print(f.readlines()) #读取一行,变成列表 ['你好 ', '哈哈哈给 ', '好的啊']
3)文件的写模式 w
# w 模式 # 1、文件存在,则清空 # 2、文件不存在,则创建 with open('b.txt',mode='w',encoding='utf-8') as f: # f.write('你好啊,张山 ') # f.write('你好啊,SB ') info = ['你好啊,张山 ','你好啊,SB ','圆润的走开,SB '] # for line in info: # f.write(line) f.writelines(info) f.write('a b c ')
4)只追加写模式 a
# a : 只追加写模式, # 1、文件不存在如果不存在则创建 # 2、文件存在,指针直接移动到文件末尾 with open('b.txt',mode='a',encoding='utf-8') as f: f.write('55555 ') f.write('494 ')
5)控制文件读写单位的2种模式
1、t : 默认的模式,也就被省略了。 但局限性强,只能用于文本文件,像图片,视频,就无法改模式 2、b : 二进制模式,该模式下读写但都是bytes。该模式下不能指定encoding参数
二进制读取图片,视频
二进制读取图片,视频 with open('1.jpg',mode='rb') as f: a = f.read() print(a) # 二进制读取文本文件,解码获取显示内容 with open('a.txt',mode='rb') as f: a = f.read() print(a) print(a.decode('utf-8'))
二进制写入文本文件需要编码存入文本文件
with open('a.txt',mode='wb') as f: f.write('你好aagagagagwg啊sb '.encode('utf-8')) f.write('你才wwwwwwsb '.encode('utf-8'))
6)复制文件
import sys,os # print(sys.argv) src_file_path = sys.argv[1] if not os.path.isfile(src_file_path): print('文件不存在') sys.exit() dst_file_path = sys.argv[2] with open(r'%s' %src_file_path,'rb') as read_f, open(r'%s' %dst_file_path,'wb') as write_f: for line in read_f: write_f.write(line)
7)文件内容修改
# 第一种覆盖写 # with open('a.txt','rt+',encoding='utf-8') as f: # f.seek(6) # 移动的单位是字节 # f.write('[你是逗比]') # 覆盖写 # 第二种,读取文件的内容,修改字符串。第二次打开,以被赋值的字符串写入 # 缺陷,文件过大,机器卡死 # with open('a.txt','r',encoding='utf-8') as f: # data = f.read() # print(data) # data=data.replace('武大郎','张全蛋') # print(data) # with open('a.txt','w',encoding='utf-8') as f: # f.write(data) # 第二种,一行一行的写入新文件,删除旧文件,重命名新文件 import os with open('b.txt','r',encoding='utf-8') as f, open('a.txt.swap','w',encoding='utf=8') as f_new: for line in f: if '武藤兰' in line: line = line.replace('张全蛋','李狗蛋') f_new.write(line) os.remove('b.txt') os.rename('a.txt.swap','b.txt')
8)大文本读取方式
with open('Dockerfile',mode='r',encoding='utf-8') as f: f.tell() f.read(50) for line in f: mylen = len(line.encode('utf-8')) line = line.strip() print(line)