8月24日学习内容整理:字典,集合类功能,文件操作,文件类功能

一、字典类功能:字典查找速度非常快,基于哈希算法

注意:key可以是字符串,数字,布尔值,元组,因为这些都是不可变的,不可以是列表,字典,集合

     而且True和False不能和1 0共同存在,因为布尔值中True就是1,False就是0

1、clear()  清空

2、copy() 浅拷贝,也有深拷贝,与列表表示方法一样,原理类似

3、pop(key) 找不到对应的key会报错,并且会输出删除的值

   pop(key,‘默认值’)   加上默认值,如果找不到的话就不会报错,输出的是默认值

4、popitem()  删除任一个键值对(无序),并且输出删除的键值对,输出元组类型

5、setdefault(‘k2’,‘999’)   已经有k2的话不动,没有就添加进去

6、update({‘k2’:‘v5’})   已经有k2的话就修改,没有就添加进去

7、fromkeys([‘k1’,‘k2’],[‘v1’,‘v2’])一定要注意必须写dict.fromkeys()   创建一个字典,将k1和k2赋值后面的列表

二、集合 set :无序,不能有重复元素,用{}表示,不能使用索引0,1,2,...取值

1、add(‘lex’)  添加一个元素,无序的

2、clear()   清空

3、copy()   浅拷贝,也有深拷贝

4、val=s1.difference(s2)    s2不存在,s1存在的元素,赋值给新变量,s2是可迭代对象

5、s1.difference_update(s2) 不能赋值给新变量, 寻找s2不存在,s1存在的元素并更新s1,输出改变后的s1

6、val=s1.symmetric_difference(s2) 先求s1有,s2没有的元素,再求s2有,s1没有的元素,两者合并,赋值给新变量

7、s1.symmetric_difference_update(s2)计算方法与6一样,不能赋值给新变量(否则会输出None),输出的是改变后的s1

8、discard(‘ggg’)删除指定的元素,没有的话不会报错

9、val=s1.intersection(s2)  求s1和s2的交集,并赋值给新变量

10、s1.intersection_update(s2) 输出变化后的s1,计算方法和9一样

11、val=s1.union(s2)  求两者并集,赋值给新变量

12、s1.isdisjoint(s2)  有交集输出True,没有交集输出False

13、s1.issubset(s2)  s1是s2的子集输出True,不是输出False

14、s1.issuperset(s2)  s1是s2的父集输出True,不是输出False

15、pop()  随机删除元素

16、remove(‘sss’)  删除指定元素,没有的话会报错

17、s1.update(s2) 将s2和s1的不同内容加到s1中,输出变化后的s1,不能赋值给新变量,s2可以是可迭代对象,循环所有元素

补充:

1、val={}代表是空字典     set()代表是空集合     类名()代表空类

2、集合的元素要求是不能变的,所以列表,字典,集合不能是集合的元素

三、文件操作

操作文件三要素:文件路径  编码  模式

1、只读文件:不能写

 读取utf-8编码数据,【转换】成unicode(str)编码的数据
obj = open('D:\\美女模特空姐护士联系方式.txt',encoding='utf-8',mode='r') 这个编码必须是文件在硬盘里的编码
content = obj.read()
obj.close()
print(content,type(content))
r模式:把文件从硬盘里按照相应的编码读出来,计算机内部转换为unicode编码储存在内存中,我们将文件的内容赋值于content,在关闭文件,最后输出
    content,就能把文件里的内容显示出来,输出的是字符串类型,因为字符串在内存中就是以unicode编码存在的
 obj = open('D:\美女模特空姐护士联系方式.txt',mode='rb')
content = obj.read()
obj.close()
print(content,type(content))

rb模式:最大的区别在于计算机内部不进行转换,文件在硬盘是什么编码就以什么编码储存在内存中,输出的是字节类型,因为硬盘里不可能有unicode编码
   所以在内存中只能是除unicode以外的编码,而字节类型恰是如此

2、只写文件:不能读

 obj = open('美女.txt',mode='w',encoding='utf-8')
obj.write("海角-贾敏")
obj.close()

obj = open('美女.txt',mode='wb')
obj.write("海角-贾敏22222".encode('utf-8'))
obj.close()
w模式:依然计算机内部要进行编码转换
    如果文件存在,就先清空(open的时候就清空了),再写(write的时候不会把之前写的内容清空)(实际上呢计算机内部并没有清空,只是表现出来清空)
    如果文件不存在,就创建
    直接写字符串
wb模式:计算机内部不进行转换
    需要把字符串变为字节(encode功能)
3、追加文件:不能读
 obj = open('美女.txt',mode='a',encoding='utf-8')
obj.write("小红")
obj.close()

obj = open('美女.txt',mode='ab')
obj.write("小红")
obj.close()
a模式:在文件最后加上内容
ab模式:注意还是要转换成字节类型

4、读写文件:有很多模式,最常用的就是r+
 obj = open('美女.txt',mode='r+',encoding='utf-8')
data = obj.read(1) # 读
情况一:
obj.write('6') # 在最后继续写
情况二:
obj.seek(1)
obj.write('6') # 定位到指定位置
obj.close()
print(data)
r+模式:先读后写的话,写在最后面
    不读直接写,在第1个位置覆盖原来,因为内存空间已经被占用,没有多余的空间可以插入,所以只能覆盖
    读一部分再写,在指定位置写需要seek(),不加seek()的话还是加在最后面
r+b模式:还是要转换为字节类型

5、功能
a)read() 默认读所有
  read(2) 前2个字符,若是r+b模式:前2个字节
b)write(字节或者字符串)
c)seek(3) 调整位置,3为字节数,指定指针位置
d)tell() 读取当前指针位置
e)writable() 是否可写
f)readable() 是否可读
g)close() 关闭
h)flush() 将内存中的内容强制刷到硬盘
i)readline() 按行读,指针到哪读那一行
j)truncate() 根据指针位置截取前边,后边都不要
obj = open('美女.txt',mode='r+',encoding='utf-8')
obj = open('美女.txt',mode='r+',encoding='utf-8')
data = obj.read()  # 读取所有文件内容
data = obj.read(2) # r,字符;rb,字节
obj.write('字节或字符串')
obj.seek(2)         # 永远是字节,指定指针位置
obj.tell()          # 读取当前指针的位置
是否可写
obj.writable()
是否可读
obj.readable()
将内存中内容刷到硬盘
obj.flush()
obj.tell()
data = obj.readline()
print(data)
data = obj.readline()
print(data)
截取文件内容,根据指针位置,只保留指针之前数据
obj.truncate()
for line in obj:
    print(line)

 


补充:
1、for line in obj:
    print(line) 循环每一行,在文件特别大的情况下使用
2、py2里xreadlines() 相当于for循环
  py3里没有
xreadlines()
3、关闭文件一定要写
with open(........)
  obj.read()
代码执行完后,自动关闭文件


 


 

posted @ 2017-08-24 20:20  九二零  阅读(127)  评论(0编辑  收藏  举报