Python开发第四篇
文件操作
一、文件基本操作
打开文件方法:open
f = open("test",encoding="")
r:只读模式(只能读取文件,不能做写操作,文件不存在时会报错)
w:只写模式(只能做写操作不能做读操作,而且会清空文件后,写入,文件不存在时会自动创建)
a:追加模式(在文件最后增加内容,只能写入,不能读取文件)
rb:以二进制的方式读取文件,不能指定编码格式
wb:以二进制的方式写入文件,不能指定编码格式
ab:以二进制的方式追加,同样不能指定编码格式
r+:读写模式,不会清空源文件,当只有wrire操作时,会从文件的开始地方进行覆盖写操作
w+:写读模式,先清空源文件的内容,当写操作完成后,文件指针在最后一个字符的位置,读操作为空,需要指定指针位置才能读内容
a+:追加读模式,不会清空源文件,追加操作完成后,也需要指定指针位置才能读取内容。
不指定打开方式时默认为只读模式,不指定编码规则时,默认为系统的编码格式
文件操作方法
1、f.read()按字符读取所有内容,并返回一个内容的字符串形式,如果指定一个整形的参数,读取定长的内容,换行符作为一个字符
1 f = open("test","r",encoding="utf8")
2 a = f.read()#读取所有,返回的是字符串
3 print(a)
4 print(type(a))
5
6
7 sunqilalalala
8 1111
9 22223
10 tgsg
11 <class 'str'>
1 print(f.read(10))#读取10个字符
2
3 sunqilalal
2、f.readline()读取文件的一行
1 print(f.readline())#每次只读取一行
2
3 sunqilalalala
3、f.readlines()读取文件的所有行,返回一个列表
1 f = open("test","r",encoding="utf8")
2 a = f.readlines()#一次读取所有行
3 print(a)
4
5 ['sunqilalalala\n', '1111\n', '22223\n', 'tgsg']
4、f.write()文件写操作,写入一个字符串到文件中,不会自动写入换行符
1 f = open("test","w",encoding="utf8")
2 f.write("sunqi\n")#写操作会覆盖源文件,然后写入新的内容,文件不存在就会创建,需要手动添加换行
3 a = f.write("你好\n")#返回写入的字符的个数一般是字符串的长度
4 f.write("hello\n")
5 print(a)
6 f.close()
5、f.writelines()写入一个元素为字符串的序列化对象,不会自动写入换行符
1 f = open("test","w",encoding="utf8")
2
3 b = f.writelines(["1","2","3","4"])#返回值为none
4 print(b)
5 f.close()
6、f.tell()显示当前文件光标所在的位置
7、f.seek()移动光标到指定位置
1 f = open("test","a+",encoding="utf8")#每次对文件追加之后,文件指针都在最后,把指针置位零就可以正常读取了
2
3 print(f.tell())
4 f.seek(0)
5 print(f.readlines())
6 print(f.tell())
f.seek(10,0)可以更改光标的位置(要求以b的方式发开)。默认从文件开始的位置计算
0代表默认模式,可以不指定
1代表相对模式
2代表倒序模式
8、ff.lush()将内存中的数据刷入到硬盘
9、f.truncate()截取文件的部分内容然后覆盖的存储在文件中,要求只能以写的模式打开,但是不能是w,w+
10、f.close()关闭文件操作
11、应用:如何优雅快速读取大文件的最后一行?
1 f = open("test","r")
2 for i in f:
3 offs = -10
4 while True:
5 f.seek(offs,2)#指针倒放,然后正常读取,当读取超过一行是data的长度为大于等于2,断定最后一行已经读完,取出即可
6 data = f.readlines()
7 if len(data)>1:
8 print(data[-1])
9 break
10 else:#最后一行没读完或最后一行杠读完,不确定于是在扩大读的范围
11 offs = offs * 2