字典:
和字符串、列表 并列为最常用变量类型!
字典定义格式(前面是key,后面是value):
定义字典中,key是不能重复的,字典的key是无序的
字典取值的两种方法:
print(info['id'])通过key取值
print(info.get('addr')) 和用key取值的区别时,找不到key时,.get() 会返回空,但是用key取值会报错
print(info.get('addr','beijing')) get方法还可以多传一个参数,如果get不到key的话,那么返回xxx,不写的话,默认get不到返回None
字典增加key的两种方法:
info['addr']='beijing' #给字典新增一个值;在有这个key的情况下,就是修改这个key的value,没有key的话就是新增(修改字典的唯一方法)
info.setdefault('phone',138111111) #给字典新增一个值
字典删除的四种方法:
del info['addr'] #删除这个key
print(info.pop('addr'))#pop删除的时候必须指定key,pop方法会返回删除的key对应的value,key不存在,pop删除会报错
info.clear() #清空字典
info.popitem() #随机删除一个元素,不常用
 
要取到,huoxing 这个值,只能是print(new_infos[0].get('yangwn').get('addr'))
 
字典的内置方法:
print(all.keys()) # 返回字典里面的所有keys
print(all.values()) # 获取字典所有的value
print(all.items()) #获取字典的key和value,循环的时候用
直接循环字典,循环的是字典的key
如果想循环的时候同时获取到key和value,那么就要用.items的方法,但是这种方法是把字典转换成列表格式再输出,效率不高,不推荐,上面的“for k in info2  print(info2.get(k))/print (k,info2[k])” 效率更高。
 

dic = {'stu1':'cc','stu2':'andashu','stu3':'niuniu'}

for k in dic:

  print(k,dic[k])#打印key和value的值,推荐使用这种方式,速度快

for k,v in dic.items():

  print(k,v)#打印key和value的值,这种方式不推荐,因为会把字典转换成列表,效率不高

 
info.has_key('name')  ——python2中判断key是否存在的方法,python3没有
print ('name' in info) ——python3 里直接用in来判断key是否存在 
 
文件的操作
step1: 打开文件
step2: 读取/写入文件
step3: 保存文件
 
f代表的是这个文件的对象,也叫句柄
文件打开模式有三种:
1、w写模式,它是不能读的,文件如果不存在,会在默认目录下创建一个新文件,如果用w模式打开一个已经存在的文件,会清空以前的文件内容,重新写
2、r读模式,只能读,不能写,而且文件必须存在(不会自动创建文件),windows默认字符集是gbk,要指定字符集,加上encoding=‘utf-8’,之后才可以读
3、a追加模式,也是只能写,在文件末尾添加内容
4、w+,写读模式,用w+模式打开一个已经存在的文件,仍然会清空以前的文件内容,重新写
5、r+,读写模式,只要沾上r,文件必须存在(不会自动创建文件),只要沾上w,肯定会清空原来的文件
在python2 里面也可以用file这个函数去操作这个文件(f=file('a.txt,),'r'),但是在python3中只能用open,如果在open的时候不指定文件模式,那就默认读模式
6、a+模式下,也可以读写,文件如果不存在,也会在默认目录下创建一个新文件,但是此时默认文件指针在最后,如果想读出内容,要搭配f.seek(0)
类似的方法还有# print(f.readline())#只读文件一行的内容,一条一次只能读一行内容,有多行需要执行多条;
类似还有
 
注意:直接循环文件对象的话,循环的是文件每一行的内容(空行也算一行),把每行的内容挨个存内存,一次只处理一行,比"f.read()","f.readlines()"(这两种是一次全部读取)快多了!!
7、rb+、wb+、ab+,这种是二进制模式打开或者读取,一些音乐文件、图片等等
 
修改文件的方式:(其原理是生成一个新字符串new_res,保存了新的操作,同时删除了旧字符串res,把新文件改名成原来的,从而实现修改文件;如果不清空文件内容,直接replace,是在字符串res后面追加)(磁盘里读取,到内存,内存再传给cpu做处理,之后再返回)
同理,上图用f.read() 一次性读取所有内容,数据量一大就会卡死,太慢,搭配for循环读取速度会快(每读取一行内容,都写到新文件里面,之后把旧文件删除,再把新文件改成原文件名,这一方法必须用到两个文件)
改成下图,最后搭配os模块更名即可(先import os)。
文件有打开就有关闭!不关闭的话,别人也打不开了。
 
.flush()的用法
time.sleep(30),程序等30秒钟,之后再执行(内存写到磁盘里),上图程序虽然在等待中,但已经写入到文件里了。
 
with的用法
posted on 2017-06-03 22:09  chenxi99  阅读(1097)  评论(0编辑  收藏  举报