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

 

posted @ 2018-04-02 20:57  SunQi  阅读(142)  评论(0编辑  收藏  举报