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