文件操作流程:

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())    #输出0
print(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())    #输出0
print(f.read(5))   #输出春眠不觉晓
print(f.tell())    #输出15
f.seek(0)        #把指针改回0
print(f.tell())    #输出0

 

3.flush()方法

flush() 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。

一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。

import time
file=open('春晓','w',encoding='utf-8')
for i in range(30):
    file.write('1')        #在缓冲区写入一个‘1’
    file.flush()            #将缓冲区中的一个‘1’写入磁盘(即文件中)
    time.sleep(0.1)    #暂停0.1s
file.close()                #关闭文件

 

4.truncate()方法

 truncate() 方法用于从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后 V 后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。 。

truncate()这个函数跟文件指针位置无关。每次执行都是从文件开始处执行,也就是seek(0,0)的位置开始,截取指定参数的n个字符,其它的全部删除。所以要用a+(a不行)或是r+。如果用w+模式会读出空,因为w是先删除再写,一定不要用。执行结果为,只剩文件开头的n个字符。

当size值存在时,表示该值位置处截断,该位置后面的内容被删除;

当size值不存在时,表示从当前位置截断,但不是真正的截断,该位置后面的内容不会被真正删除  ????

 

posted on 2018-04-26 15:03  行走的cd  阅读(131)  评论(0编辑  收藏  举报