python3全栈学习笔记-03

对文件的操作分为3步:
1. 打开文件,获得文件句柄
2. 通过文件句柄操作文件
3. 关闭文件

假设有如下文件:   

   

1 上联 :**春水初生,春林初盛,春风十里,不如你。**
2 下联 :**秋池渐涨,秋叶渐黄,秋思一半,赋予卿。**

  

文件的基本操作:

1 f= open('file.txt','r')#以只读方式打开一个文件,获取文件句柄,如果是读的话,r可以不写,默认就是只读,
2 first_line = f.readline()#获取文件的第一行内容,返回的是一个list
3 print(first_line)#打印第一行
4 second_line=f.readline()#获取除了第二行内容
5 print(second_line)#获取文件的第二行内容,返回的是一个list
6 print('------------------')
7 res=f.read()#获取除了第二行剩下的所有文件内容
8 print(res)


打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,后面通过此文件句柄对该文件操作
打开文件的模式有:

1 r,只读模式(默认)。
2 w,只写模式。【不可读;不存在则创建;存在则删除内容;】
3 a,追加模式。【不可读; 不存在则创建;存在则只追加内容;】


"+" 表示可以同时读写某个文件

1 r+,【可读、可写;可追加,如果打开的文件不存在的话,会报错】
2 w+,【写读模式,使用w+的话,已经存在的文件内容会被清空,可以读到已经写的文件内容】
3 a+,【追加读写模式,不存在则创建;存在则只追加内容;】



"U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用)
"b"表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注)
文件操作方法:

 1 # -*- coding:utf-8 -*-
 2 with open('test.txt', 'r+',encoding='utf-8') as f: # encoding参数可以指定文件的编码
 3     print(f.readline())  # 读一行
 4     print(f.readable())  # 判断文件是否可读
 5     print(f.writable())  # 判断文件是否可写
 6     print(f.encoding)# 打印文件的编码
 7 # f.read()  # 读取所有内容,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
 8 # f.readlines()  # 读取所有文件内容,返回一个list,元素是每行的数据,大文件时不要用,因为会把文件内容都读到内存中,内存不够的话,会把内存撑爆
 9 # f.tell()  # 获取当前文件的指针指向
10 # f.seek(0)  # 把当前文件指针指向哪
11     f.write('\n爱情证书\n')  # 写入内容
12     f.flush()  # 写入文件后,立即从内存中把数据写到磁盘中
13     f.truncate()  # 清空文件内容
14     f.writelines(['爱情证书', '孙燕姿'])  # 将一个列表写入文件中
15 f.close()#关闭文件


大文件时,读取文件高效的操作方法:

用上面的read()和readlines()方法操作文件的话,会先把文件所有内容读到内存中,这样的话,内存数据一多,非常卡,高效的操作,就是读一行操作一行,读过的内容就从内存中释放了
with使用:在操作文件的时候,经常忘了关闭文件,这样的就可以使用with,它会在使用完这个文件句柄之后,自动关闭该文件,使用方式如下:
```python

1 with open('test.txt', 'r+',encoding='utf-8') as fr, open('file_bak', 'w+',encoding='utf-8') as fw:
2     for line in fr:  # 循环file.txt中的每一行
3         fw.write(line)  # 写到file_bak文件中

修改文件

# -*- coding:utf-8 -*-

with open('test.txt', 'r+',encoding='utf-8') as fr, open('file_bak', 'w+',encoding='utf-8') as fw:
    for line in fr:  # 循环file.txt中的每一行
        new_line = line.replace('爱情证书', '爱情在哪里')
        fw.write(new_line)  # 写到file_bak文件中


集合:

集合也是一种数据类型,一个类似列表东西,它的特点是无序的,不重复的,也就是说集合中是没有重复的数据

集合的作用:

1、它可以把一个列表中重复的数据去掉,而不需要你再写判断

2、可以做关系测试,比如说有两个班,一个性能测试班,一个是接口测试班的,想找出来既学习了性能又学习了接口测试的同学,就可以用集合

集合操作

 1 # -*- coding:utf-8 -*-
 2 
 3 list1 = {1, 2, 3, 4, 5, 6, 9}
 4 list2 = {2, 3, 4, 6, 1}
 5 list3 = {1, 2, 3}
 6 print(list1.intersection(list2))  # 取交集,也就是取list1和list2中都有的
 7 print(list1 & list2)# 取交集
 8 print(list1.union(list2))  # 取并集,也就是把list1和list2合并了,然后去除重复的
 9 print(list1 | list2)# 取并集
10 print(list1.difference(list2))  #取差集 在list中存在,在list2中没有的
11 print(list1 - list2)
12 print(list3.issubset(list1))#判断list3是不是list1的子集
13 print(list1.issuperset(list3))#判断list1是不是list3的父集
14 print(list1.isdisjoint(list3))#判断list1和list3是否有交集
15 print(list1.symmetric_difference(list2))#对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉
16 print(list1 ^ list2)
17 list1.add(888)#添加元素
18 list1.update([777,666,666])
19 list1.remove(777)#删除元素,如果元素不存在会报错
20 list1.pop()#删除一个随机的元素,并返回删除的元素
21 list1.discard('dddd')#如果删除的元素存在,删除,不存在不做处理

猜你喜欢

转载自www.cnblogs.com/purepleasure/p/pythonStudy03.html