文件操作流程:
1.打开文件,得到文件句柄并赋值给一个变量
2.通过句柄对文件进行操作
3.关闭文件
关python文件读写模式w,w+,r,r+,a,a+的区别:
模式 | 可做操作 | 若文件不存在 | 是否覆盖 |
r | 只能读 | 报错 | - |
r+ | 可读可写 | 报错 | 是 |
w | 只能写 | 创建 | 是 |
w+ | 可读可写 | 创建 | 是 |
a | 只能写 | 创建 | 否,追加写 |
a+ | 可读可写 | 创建 | 否,追加写 |
读操作:
三步走:打开文件,读文件,关闭文件
1.read()方法
f=open('春晓','r',encoding='utf-8')data=f.read() #如果写data=f.read(5),就会显示5个字符的内容print(data)f.close()
2.readline()方法
f=open('春晓','r',encoding='utf-8')data=f.readline()print(data)f.close() #输出第一行,如果再添加一个readline(),就继续输出第二行
3.readlines()方法
f=open('春晓','r',encoding='utf-8')data=f.readlines() print(data)f.close() #输出['春眠不觉晓\n', '处处闻啼鸟\n', '夜来风雨深\n', '花落知多少'],输出一个列表
写操作:
1.先格式化再写
f=open('春晓','w',encoding='utf-8')f.write('hello world')f.wirte('chen')f.close() #输出hello worldchen
2.不格式化,追加内容写进去
f=open('春晓','a',encoding='utf-8')f.write('\nhello world')f.write('\nchen')f.close() #就把open()方法里的‘w’改成‘a’,a即append
文件操作的一些方法:
1.tell()方法
可以输出当前指针的位置
f=open('春晓','r',encoding='utf-8')print(f.tell()) #输出0print(f.read(5)) #输出春眠不觉晓print(f.tell()) #输出15#tell()方法一个中文占三个字节,一个英文占1个字节,如果把文件第一句内容改为‘Hello world’,则最后一个print(f.tell())输出为5
2.seek()方法
可以改变当前指针的位置
f=open('春晓','r',encoding='utf-8')print(f.tell()) #输出0print(f.read(5)) #输出春眠不觉晓print(f.tell()) #输出15f.seek(0) #把指针改回0print(f.tell()) #输出0
3.flush()方法
flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
import timefile=open('春晓','w',encoding='utf-8')for i in range(30): file.write('1') #在缓冲区写入一个‘1’ file.flush() #将缓冲区中的一个‘1’写入磁盘(即文件中) time.sleep(0.1) #暂停0.1sfile.close() #关闭文件
4.truncate()方法
truncate() 方法用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。 。
truncate()这个函数跟文件指针位置无关。每次执行都是从文件开始处执行,也就是seek(0,0)的位置开始,截取指定参数的n个字符,其它的全部删除。所以要用a+(a不行)或是r+。如果用w+模式会读出空,因为w是先删除再写,一定不要用。执行结果为,只剩文件开头的n个字符。
当size值存在时,表示该值位置处截断,该位置后面的内容被删除;
当size值不存在时,表示从当前位置截断,但不是真正的截断,该位置后面的内容不会被真正删除 ????