Python第七课(文件操作/函数前戏)

Python第七课(文件操作/函数前戏)    >>>转到思维导图>>>转到中二青年

文件操作模式补充

"+" 表示可以同时读写某个文件
r+, 读写【可读,可写】
w+,写读【可读,可写】
a+, 写读【可读,可写】

文件内光标移动

一: read(3):
1. 文件打开方式为文本模式时,代表读取3个字符
2. 文件打开方式为b模式时,代表读取3个字节
二: 其余的文件内光标移动都是以字节为单位如seek,tell,truncate
注意:
1. seek有三种移动方式0,1,2,其中1和2必须在b模式下进行,但无论哪种模式,都是以bytes为单位移动的
2. truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或a或a+等模式下测试效果

检测文件内容

 1 with open(r'test01.txt','rb') as f:
 2     # 先将光标移动到文件末尾
 3     f.seek(0,2)
 4     while True:
 5         res = f.readline()
 6         # 查看光标移动了多少位 bytes
 7         # print(f.tell())
 8         if res:
 9             print("新增的文件内容:%s"%res.decode('utf-8'))
10             # 说明有人操作当前文件
11         # else:
12         #     # 说明文件没有被任何人操作
13         #     print('暂无其他人操作该文件')

截断文件

1 with open(r'test','a',encoding='utf-8') as f:
2     f.truncate(6)  # 接收的字节的长度 整型
3     # 保留0~6字节数 后面的全部删除(截断)

修改文件

文件的数据是存放于硬盘上的,因而只存在覆盖、不存在修改这么一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:

方式一:将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

 1 with open(r'test02.txt','r',encoding='utf-8') as f:
 2     data = f.read()
 3     print(data)
 4     print(type(data))
 5  
 6 with open(r'test02.txt','w',encoding='utf-8') as f:
 7     res = data.replace('egon','jason')
 8     print(data)
 9     f.write(res)
10      
11 """
12 优点:任意时间硬盘上只有一个文件 不会占用过多硬盘空间
13 缺点:当文件过大的情况下,可能会造成内存溢出
14 """

方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

 1 import os
 2  
 3  
 4 with open(r'test02.txt','r',encoding='utf-8') as read_f,\
 5         open(r'test02.swap','a',encoding='utf-8') as write_f:
 6     for line in read_f:
 7         new_line = line.replace('jason','egon')
 8         write_f.write(new_line)
 9 os.remove('test02.txt')
10 os.rename('test02.swap','test02.txt')
11  
12  
13 """
14 优点:内存中始终只有一行内容 不占内存
15 缺点:再某一时刻硬盘上会同时存在两个文件
16 """

函数前戏

def用来定义函数,必须先定义后使用

函数名的命名规则跟变量名一模一样

定义的时候,只检测语法,不执行代码

1 #语法
2 def 函数名(参数1,参数2,参数3,...):
3     '''注释'''
4     函数体
5     return 返回的值
6     #函数名要能见名知意

END

posted @ 2019-07-08 16:12  宋人杰  阅读(174)  评论(0编辑  收藏  举报