内容回顾:
- bytes
- str 和bytes
- int
- str
- list
- tuple
- 深拷贝和浅拷贝
今日内容:
数据类型
- bytes
- int
- str
- bool
- list
- tuple
- dict (字典)
dic = {'k1':'v1'}
- values
- keys
- items
- get
- setdefault
- fromkeys dict.fromkeys
- update
- pop
- popitem
- copy
- clear
#dict.fromkeys 的3个示例原理:
val = dict.fromkeys(['k1','k2','k3'],666) #列表内容为键值对的key,后面数值为所有键值对的值
print(val)
val['k1'] = 999
print(val)
#fromkeys 指向的是同一个列表---value,所以3个可以vlaue相同都为追加后的列表
val = dict.fromkeys(['k1','k2','k3'],[])
val['k1'].append(678)
val['k2'].append(999)
print(val)
val = dict.fromkeys(['k1','k2','k3'],[])
val['k1'].append(666) #修改内部值
val['k1'] = [1,2,3] #将原k1的vlaue由666,修改为[1,2,3]---重新赋值
print(val)
- set (集合)
di = {"k1","k2"}#set
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
names.add('龙哥') #集合添加元素,如果已经存在,则不再重复添加
print(names)
"""
#difference ---差集
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
val = names.difference(boys) #names 中存在,boys中不存在的数据---name必须是集合,boys可以是列表或元组
print(val)
"""
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
val = boys.difference(names) #boys 中存在,names中不存在的数据
print(val) #创建了一个新就集合---差集部分
"""
#difference_update
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
boys.difference_update(names) #先找到差集,然后再重新将差集赋值给boys
print(boys)
"""
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
names.difference_update(boys) #先找到差集,然后再重新将差集赋值给names
print(names)
"""
"""
#symmetric_difference ----对称差集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
val = names.symmetric_difference(boys) #将两个集合分别求差集后,将这些差集和在一起,形成一个新的集合
print(val)
"""
"""
#symmetric_difference_update----对称差集重新赋值个某个集合
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
names.symmetric_difference_update(boys) #将两个集合分别求差集后,再将这些差集和在一起,重新赋值个names
print(names)
"""
"""
#discard 集合中删除指定的值
names = {'龙哥','海角','老狗','成绩','小江','小高'}
names.discard('龙哥')
print(names)
"""
"""
#intersection ---求交集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
val = names.intersection(boys) #将names和boys求交集
print(val)
"""
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
names.intersection_update(boys) #将names和boys求交集,并将交集重新赋值个names
print(names)
"""
"""
#union --求并集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
val = names.union(boys)
print(val)
"""
"""
#isdisjoint 判断是否无交集
#有交集:False
#无交集:True
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'小高','海娇','小狗'}
val = names.isdisjoint(boys)
print(val)
"""
#issubset 判断是否是子集
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'海娇','王老师'}
val = names.issubset(boys) #names集合不包含在boys集合里,为False
print(val)
"""
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'龙哥','老狗'}
val = names.issubset(boys) #names集合不包含在boys集合里,为False
print(val)
"""
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'龙哥','老狗'}
val = boys.issubset(names) #boys 子集包含在names集合里,为True
print(val)
"""
"""
#issuperset 判断是否是父集
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'龙哥','老狗'}
val = names.issuperset(boys) #names是boys的父集,结果为True
print(val)
"""
"""
#pop --随机删除集合的一个元素
names = {'龙哥','海角','老狗','成绩','小江','小高'}
v = names.pop()
print(v)
"""
"""
#remove - 删除集合里指定的元素,当指定的元素不存在时,会报错
names = {'龙哥','海角','老狗','成绩','小江','小高'}
#names.remove('老狗')
names.remove('老狗1') #删除指定的元素不存在时,会报错
print(names)
"""
#update --更新
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = ['龙哥1','老狗1']
names.update(boys) #names必须是个集合,而boys可以是集合或列表等
print(names)
"""
"""
names = {'龙哥','海角','老狗','成绩','小江','小高'}
boys = {'龙哥1','老狗1'}
names.update(boys) #names必须是个集合,而boys可以是集合或列表、元组
print(names)
"""
"""
#集合可以通过for循环,也可以取长度
names = {'龙哥','海角','老狗','成绩','小江','小高'}
for item in names:
print(item)
print(len(names))
"""
#集合的应用:
#列表元素去掉重复项
names = ['龙哥','老狗','海角','老狗','成绩','小江','小高','小江']
val = set(names)
print(val)
names2 = list(val)
names = names2
print(names2)
print(names)
#集合:
- 元素,不可变
文件操作
美女模特空姐护士联系方式.txt
1. 路径:D:美女模特空姐护士联系方式.txt
2. 编码:utf-8
3. 模式:只读 r, 只写,读写...
- rb
- r
- r+ #常用,能读也能写 *****
- r+b
- wb
- w
- w+ #写读,先清空,再写了之后才能读,读的是新写的数据
- w+b
- ab
- a #追加,尾部写入
- a+ #读写,只能在最后面追加写入,通过指针指定也无效
- a+b
功能:
obj = open (文件路径,mode='r+')
obj.read()
obj.write()
obj.seek()
obj.tell()
obj.close()
obj.flush()
#obj.readline() #等价与py2的obj.xreadlines()
for line in obj:
print(line)
obj.readlines() #不好,逐行读取,放在内容,分割成列表
obj.xreadlines() #py2中存在
PS :打开文件后,记得关闭文件
obj = open(文件路径,mode='r+')
xxxx
obj.close()
自动关闭:
with open(文件路径,mode='r+') as obj:
obj.read()
#代码执行完毕后,自动关闭文件
只读:
#读取文件
#读取utf-8编码的数据,【转换】成unicode(str)编码的数据
obj = open('D:美女模特空姐护士联系方式.txt',encoding='utf-8',mode='r')
content = obj.read()
obj.close()
print(content) #打印出来的conten为str类型-----unicode编码
打印出来的conten为str类型
window--cli示例:
Microsoft Windows [版本 6.1.7601]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。
C:UsersH>python D:Install-Filepython-workauto-chapter74-file-operate.py
test---1500
C:UsersH>
#读文件rb模式
obj = open('D:美女模特空姐护士联系方式.txt', mode='rb') #rb模式读取的数据为原始编码,不做转换
content = obj.read()
obj.close()
print(content)
print(content,type(content))
# b'xbaxa3xbdxbf--test---1500'
# b'xbaxa3xbdxbf--test---1500' <class 'bytes'>
只写:
- obj = open('美女',mode='wb')
- obj = open('美女',mode='w',encoding='utf-8')
示例:
obj = open('美女',mode='w',encoding='utf-8')
obj.write("海娇-贾敏")
obj.close()
print(data)
obj = open('美女',mode='wb')
obj.write("海娇-贾敏22222".encode('utf-8'))
obj.close()
只追加: a
- obj = open('美女',mode='ab')
- obj = open('美女',mode='a',encoding='utf-8')
示例:
obj = open('美女',mode='a',encoding='utf-8')
obj.write("小红")
obj.close()
print(obj)
obj = open('美女',mode='ab')
obj.write("龙哥22".encode('utf-8'))
obj.close()
r+ 能读写 示例:
obj = open('美女',mode='r+',encoding='utf-8')
data = obj.read()
obj.write("66666")
obj.close()
print(data)
=============================脚本=========================
字典补充知识相关脚本:
1 #dic = {'k1':'v1'} 2 3 #1.字典的key都能是什么? 4 #布尔值:True = 1 ; False = 0 5 ###!!!不可变:str,int bool,tuple -----可以作为key的值 6 ##可变:list,dict,set ----不可以作为key的值 7 8 #2.字典查找速度快,给予哈希索引 9 #字典的key在内存中是哈希表,哈希索引 10 11 12 13 14 #True 的值为1,所以True 不能与1同时做为key的值;同理False与0不能同时做为key的值 15 """ 16 dic = { 17 'k1':'v1', 18 2:'v1', 19 True:'v1', 20 #1:'vvvv1' 21 (11,22,33):'v3', 22 #[11,22,33]:'v4' #list 列表不能作为key的值 23 } 24 print(dic) 25 26 """ 27 28 #pop 删除对应的key及其value,同时获取删除key对应的值 29 """ 30 dic = {'k1':'v1','k2':'v2'} 31 v = dic.pop('k2') 32 print(dic) 33 print(v) 34 """ 35 36 """ 37 #若果key不存在,则不删除key,但同时可以获取不存在key的默认值-----存在默认值的情况,如果没有指定默认值,值报错 38 dic = {'k1':'v1','k2':'v2'} 39 v = dic.pop('k22','默认值') 40 print(dic) 41 print(v) 42 """ 43 44 #popitem 45 #删除键值对 46 47 """ 48 dic = {'k1':'v1','k2':'v2'} 49 v = dic.popitem() 50 print(dic) 51 print(v) 52 """ 53 54 """ 55 #分别赋值模式---改进 56 dic = {'k1':'v1','k2':'v2'} 57 v1,v2 = dic.popitem() 58 print(dic) 59 print(v1,v2) 60 """ 61 62 ### 字典里的设置:添加,修改 63 64 #字典里的---设置---setdefault 65 #setdefault ----添加---,没有就添加,有就不变 66 """ 67 dic = {'k1':'v1','k2':'v2'} 68 dic.setdefault('k3','999') 69 print(dic) 70 """ 71 72 """ 73 dic = {'k1':'v1','k2':'v2'} 74 dic.setdefault('k2','999') #k2的value不发生变化 75 #dic['k2'] = 999 #将k2的value修改为999 76 print(dic) 77 """ 78 79 80 #update 81 #key不存在----即没有重复出现时 82 """ 83 dic = {'k1':'v1','k2':'v2'} 84 dic.update({'k3':'v4','k5':'v5'}) 85 print(dic) 86 """ 87 88 """ 89 #key存在----将原key的value更新为新的value 90 dic = {'k1':'v1','k2':'v2'} 91 dic.update({'k3':'v4','k2':'v5'}) 92 print(dic) 93 """ 94 95 ####----以上都是通过对象(类的对象)得出的功能 96 97 #fromkeys ----通过类表示出的功能 98 99 """ 100 val = dict.fromkeys(['k1','k2','k3'],666) #列表内容为键值对的key,后面数值为所有键值对的值 101 print(val) 102 val['k1'] = 999 103 print(val) 104 105 """ 106 107 """ 108 #fromkeys 指向的是同一个列表---value,所以3个可以vlaue相同都为追加后的列表 109 val = dict.fromkeys(['k1','k2','k3'],[]) 110 val['k1'].append(678) 111 val['k2'].append(999) 112 print(val) 113 """ 114 115 """ 116 #追加与修改 117 val = dict.fromkeys(['k1','k2','k3'],[]) 118 val['k1'].append(666) #修改内部值 119 val['k1'] = [1,2,3] #将原k1的vlaue由666,修改为[1,2,3]---重新赋值 120 print(val) 121 """
集合---set相关脚本:
1 #set 2 3 """ 4 names = {'龙哥','海角','老狗','成绩','小江','小高'} 5 names.add('龙哥') #集合添加元素,如果已经存在,则不再重复添加 6 print(names) 7 """ 8 9 #difference ---差集 10 """ 11 names = {'龙哥','海角','老狗','成绩','小江','小高'} 12 boys = {'小高','海娇','小狗'} 13 val = names.difference(boys) #names 中存在,boys中不存在的数据---name必须是集合,boys可以是列表或元组 14 print(val) 15 """ 16 17 """ 18 names = {'龙哥','海角','老狗','成绩','小江','小高'} 19 boys = {'小高','海娇','小狗'} 20 val = boys.difference(names) #boys 中存在,names中不存在的数据 21 print(val) #创建了一个新就集合---差集部分 22 """ 23 24 25 #difference_update 26 """ 27 names = {'龙哥','海角','老狗','成绩','小江','小高'} 28 boys = {'小高','海娇','小狗'} 29 boys.difference_update(names) #先找到差集,然后再重新将差集赋值给boys 30 print(boys) 31 """ 32 33 """ 34 names = {'龙哥','海角','老狗','成绩','小江','小高'} 35 boys = {'小高','海娇','小狗'} 36 names.difference_update(boys) #先找到差集,然后再重新将差集赋值给names 37 print(names) 38 """ 39 40 """ 41 #symmetric_difference ----对称差集 42 names = {'龙哥','海角','老狗','成绩','小江','小高'} 43 boys = {'小高','海娇','小狗'} 44 val = names.symmetric_difference(boys) #将两个集合分别求差集后,将这些差集和在一起,形成一个新的集合 45 print(val) 46 """ 47 48 """ 49 #symmetric_difference_update----对称差集重新赋值个某个集合 50 names = {'龙哥','海角','老狗','成绩','小江','小高'} 51 boys = {'小高','海娇','小狗'} 52 names.symmetric_difference_update(boys) #将两个集合分别求差集后,再将这些差集和在一起,重新赋值个names 53 print(names) 54 """ 55 56 """ 57 #discard 集合中删除指定的值 58 names = {'龙哥','海角','老狗','成绩','小江','小高'} 59 names.discard('龙哥') 60 print(names) 61 """ 62 63 """ 64 #intersection ---求交集 65 names = {'龙哥','海角','老狗','成绩','小江','小高'} 66 boys = {'小高','海娇','小狗'} 67 val = names.intersection(boys) #将names和boys求交集 68 print(val) 69 """ 70 71 """ 72 names = {'龙哥','海角','老狗','成绩','小江','小高'} 73 boys = {'小高','海娇','小狗'} 74 names.intersection_update(boys) #将names和boys求交集,并将交集重新赋值个names 75 print(names) 76 """ 77 78 """ 79 #union --求并集 80 names = {'龙哥','海角','老狗','成绩','小江','小高'} 81 boys = {'小高','海娇','小狗'} 82 val = names.union(boys) 83 print(val) 84 """ 85 86 """ 87 #isdisjoint 判断是否无交集 88 #有交集:False 89 #无交集:True 90 names = {'龙哥','海角','老狗','成绩','小江','小高'} 91 boys = {'小高','海娇','小狗'} 92 val = names.isdisjoint(boys) 93 print(val) 94 95 """ 96 97 #issubset 判断是否是子集 98 99 """ 100 names = {'龙哥','海角','老狗','成绩','小江','小高'} 101 boys = {'海娇','王老师'} 102 val = names.issubset(boys) #names集合不包含在boys集合里,为False 103 print(val) 104 """ 105 """ 106 names = {'龙哥','海角','老狗','成绩','小江','小高'} 107 boys = {'龙哥','老狗'} 108 val = names.issubset(boys) #names集合不包含在boys集合里,为False 109 print(val) 110 """ 111 112 """ 113 names = {'龙哥','海角','老狗','成绩','小江','小高'} 114 boys = {'龙哥','老狗'} 115 val = boys.issubset(names) #boys 子集包含在names集合里,为True 116 print(val) 117 """ 118 119 """ 120 #issuperset 判断是否是父集 121 names = {'龙哥','海角','老狗','成绩','小江','小高'} 122 boys = {'龙哥','老狗'} 123 val = names.issuperset(boys) #names是boys的父集,结果为True 124 print(val) 125 """ 126 127 """ 128 #pop --随机删除集合的一个元素 129 names = {'龙哥','海角','老狗','成绩','小江','小高'} 130 v = names.pop() 131 print(v) 132 """ 133 134 """ 135 #remove - 删除集合里指定的元素,当指定的元素不存在时,会报错 136 names = {'龙哥','海角','老狗','成绩','小江','小高'} 137 #names.remove('老狗') 138 names.remove('老狗1') #删除指定的元素不存在时,会报错 139 print(names) 140 """ 141 142 #update --更新 143 """ 144 names = {'龙哥','海角','老狗','成绩','小江','小高'} 145 boys = ['龙哥1','老狗1'] 146 names.update(boys) #names必须是个集合,而boys可以是集合或列表等 147 print(names) 148 """ 149 150 """ 151 names = {'龙哥','海角','老狗','成绩','小江','小高'} 152 boys = {'龙哥1','老狗1'} 153 names.update(boys) #names必须是个集合,而boys可以是集合或列表、元组 154 print(names) 155 """ 156 157 """ 158 #集合可以通过for循环,也可以取长度 159 names = {'龙哥','海角','老狗','成绩','小江','小高'} 160 for item in names: 161 print(item) 162 print(len(names)) 163 """ 164 165 #集合的应用: 166 #列表元素去掉重复项 167 names = ['龙哥','老狗','海角','老狗','成绩','小江','小高','小江'] 168 val = set(names) 169 print(val) 170 171 names2 = list(val) 172 names = names2 173 print(names2) 174 print(names)
数据类型补充相关知识脚本:
v1 = [] #空列表 等价于: list() v1 = () #空元组 等价于: tuple() v3 = {} #空字典----默认为字典 等价于: dict() v4 = set() print(type(v4)) print(type(v3))
文件操作相关脚本:
1 """ 2 #读文件 utf-8模式 3 #读取utf-8编码的数据,【转换】成unicode(str)编码的数据 4 obj = open('D:美女模特空姐护士联系方式2.txt', encoding='utf-8', mode='r') 5 content = obj.read() 6 obj.close() 7 print(content) 8 print(content,type(content)) 9 # 海娇--test---1500 10 # 海娇--test---1500 <class 'str'> 11 #打印出来的conten为str类型-----unicode编码 12 """ 13 14 """ 15 #读文件rb模式 16 obj = open('D:美女模特空姐护士联系方式.txt', mode='rb') #rb模式读取的数据为原始编码,不做转换 17 content = obj.read() 18 obj.close() 19 print(content) 20 print(content,type(content)) 21 22 # b'xbaxa3xbdxbf--test---1500' 23 # b'xbaxa3xbdxbf--test---1500' <class 'bytes'> 24 """ 25 26 #1.文件在硬盘时时,一定是:utf-8,gbk...(以一定编码保存的) 27 #2.rb, bytes 读取的是原生文件编码,当模式为,rb模式时,不用指定编码方式 28 #3 r, 转换encoding=utf-8 当模式为r模式时,需要指定读取文件的转换编码方式 29 30 31 #在当前目录下打开文件 32 """ 33 obj = open('log.txt',mode='rb') 34 data = obj.read() 35 obj.close() 36 print(data) 37 #b'adadfdfefedfxc4xe3xbaxc3xa3xa1' 38 """ 39 40 """ 41 obj = open('log.txt',mode='r',encoding='utf-8') 42 data = obj.read() 43 obj.close() 44 print(data) 45 print(type(data)) 46 # dadfdfd-您好! 47 # <class 'str'> 48 """ 49 50 """ 51 obj = open('美女',mode='w',encoding='utf-8') 52 obj.write("海娇-贾敏") 53 obj.close() 54 print(data) 55 """ 56 57 """ 58 obj = open('美女',mode='wb') 59 obj.write("海娇-贾敏22222".encode('utf-8')) 60 obj.close() 61 """ 62 63 """ 64 obj = open('美女',mode='a',encoding='utf-8') 65 obj.write("小红") 66 obj.close() 67 print(obj) 68 """ 69 70 """ 71 obj = open('美女',mode='ab') 72 obj.write("龙哥22".encode('utf-8')) 73 obj.close() 74 75 """ 76 77 """ 78 obj = open('美女',mode='r+',encoding='utf-8') 79 data = obj.read() 80 obj.write("66666") 81 obj.close() 82 print(data) 83 84 """ 85 86 """ 87 #不读只写时,写入的数据覆盖了开始的数据 88 obj = open('美女',mode='r+',encoding='utf-8') 89 #data = obj.read() 90 obj.write("66666") 91 obj.close() 92 #print(data) 93 94 """ 95 96 """ 97 #读和追加写入 98 #写入情况1 99 obj = open('美女',mode='r+',encoding='utf-8') 100 data = obj.read(1) #读的光标,但不影响写的光标,仍然追加写入 101 obj.write("6") 102 obj.close() 103 print(data) 104 """ 105 106 """ 107 #写入情况2 108 obj = open('美女',mode='r+',encoding='utf-8') 109 data = obj.read(1) 110 obj.seek(1) #通过光标定位,将要写入的数据指定到当前光标位置,新写入的数据会覆盖当前光标位置的数据 111 obj.write("6") 112 obj.close() 113 print(data) 114 """ 115 116 117 """ 118 obj = open('美女',mode='w',encoding='utf-8') 119 obj.write("海角海角") 120 obj.close() 121 """ 122 123 124 """ 125 #默认读取全部数据 126 obj = open('美女',mode='r+',encoding='utf-8') 127 data = obj.read() #默认读取所有文件内容 128 obj.close() 129 print(data) 130 131 """ 132 133 """ 134 #指定读取位置,通过r+读取的是字符 135 obj = open('美女',mode='r+',encoding='utf-8') 136 data = obj.read(2) #读取指定文件内容----读取的是字符 137 #obj.write() #r+模式下写入的是字符 138 obj.close() 139 print(data) 140 """ 141 142 """ 143 #指定读取位置,通过r+b读取的是字节 144 obj = open('美女',mode='r+b') 145 data = obj.read(2) #读取指定文件内容----读取的是字节 146 #obj.write() #r+b模式下写入的是字节 147 obj.close() 148 print(data) 149 #b'xe6xb5' 150 151 """ 152 153 """ 154 #通过seek指定读取指针的位置 155 obj = open('美女',mode='r+',encoding='utf-8') 156 obj.seek(3) #光标位置永远是字节位置----读取第3个字节后面的数据 157 data = obj.read() 158 obj.close() 159 print(data) 160 """ 161 162 obj = open('美女',mode='r+',encoding='utf-8') 163 #obj.seek(3) #光标位置永远是字节位置----读取第3个字节后面的数据 164 #data = obj.read() 165 #obj.close() 166 #obj.tell() #读取当前指针的位置 167 #print(data) 168 num = int(input('请输入要读取的字符个数:')) 169 data = obj.read(num) 170 inp = input('从当前位置开始向后覆盖的内容:') 171 #obj.seek((obj.tell())) 172 #obj.writable() #是否可写 173 #obj.readable() #是否可读 174 #obj.flush() #强刷入硬盘---不关闭文件强制写入硬盘#默认关闭文件时会写入硬盘,flush指令可强制在不关闭文件的同时将内存中的内容强制写入硬盘 175 #obj.readline() #默认只读取1行,再写一个readline则接着上次的指针,继续读取下面一行 176 #obj.truncate() #截取,如通过seek将指针指向3,后面使用truncate指令,则只保留指针之前的数据,后面的数据删除了 177 178 #通过for循环读取每一行,直到读取所有数据 179 for line in obj: 180 print(line) 181 182 183 obj.close()