一、文件对象常用的方法

序号

常用方法

描述

1

file.close()

关闭文件。关闭后文件不能再进行读写操作。

2

file.read([size])

从文件读取指定的字节数,如果未给定或为负则读取所有。

3

file.readline([size])

读取整行,包括 “\n” 字符。

4

file.readlines([sizeint])

读取所有行并返回列表 ,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。

5

file.tell()

返回文件当前位置。

6

file.seek(offset[, from])

设置文件当前位置

7

file.write(str)

将字符串写入文件,返回的是写入的字符长度。

二、打开文件的不同模式

模式

可做操作

若文件不存在

是否覆盖

r

只能读

报错

-

r+

可读可写

报错


w

只能写

创建


w+

可读可写

创建


a

只能写

创建

否,追加写

a+

可读可写

创建

否,追加写

三、打开文件的两种方法

第一种方法:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None) 注明:文件必须以file.close()结尾。

第二种方法:
with open ( ) as f: 注明:文件不需再执行file.close(),写入文件可以以打印的形式输入。

例子:
with open ('test.txt', 'w') as f:       print('Hello world!', file = f)

四、文件读取方法例子

文件读取方法:file.read([size])file.readline([size])file.readlines([sizeint])
(以只读模式'r',文件中字符以HelloWorld为例)
1、file.read([size]),若未给参数,则输出文件中所有字符,输出形式跟在.txt中一样,如下述代码1

# 代码 1
with open ('test.txt','r',encoding = "UTF-8") as f:
	print('输出的字符是:',f.read())

# 输出结果
输出的字符是: HelloWorld

如果要输出指定数量的字符,比如我只想输出HelloHello有五个字符,代码则为file.read(5),如下述代码2

# 代码 2
with open ('test.txt','r',encoding = "UTF-8") as f:
	print('输出的字符是:',f.read(5))

# 输出结果
输出的字符是: Hello

此时如果再次执行file.read(),则会输出剩下的 World!,但再次执行file.read()会发现什么也没有输出。如下述代码3。

# 代码 3
with open ('test.txt','r',encoding = "UTF-8") as f:
	print(f.read(5))
	print(f.read())
	print(f.read())

# 输出结果
读取的字符是: Hello
再次读取的字符是: World
第三次读取的字符是:

想要搞清上述,则先要明确文件定位。与定位相关的方法有:file.tell()file.seek(offset[, from]

tell()方法告诉你文件内的当前位置, 换句话说,下一次的读写会发生在文件开头这么多字节之后。

seek(offset [,from])方法改变当前文件的位置。Offset变量表示要移动的字节数。From变量指定开始移动字节的参考位置。

如果from被设为0,这意味着将文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。

# 代码 4
with open ('test.txt','r',encoding = "UTF-8") as f:
	print('读取的字符是:',f.read(5))

	# 查找当前位置
	print('当前文件位置:', f.tell())

	# 把指针再次重新定位到文件开头
	f.seek(0,0)
	print('重新读取的字符是:',f.read())

# 输出结果
读取的字符是: Hello
当前文件位置: 5
重新读取的字符是: HelloWorld

2、file.readline([size]),每次输出一行。由于 readline() 函数在读取文件中一行的内容时,会读取最后的换行符\n,再加上 print() 函数输出内容时默认会换行,所以输出结果中会看到多出了一个空行。

3、file.readlines([sizeint]),如果未给参数,则以列表的形式输出所有行。如果参数0≤x≤某行的字符数,则输出该行;同理,输出下一行。

五、文件读取模式例子

文件读取模式:rr+ww+aa+ (文件中字符以HelloWorld为例)

1、r:只读模式
只读,不可写。打开时指针自动定位到开头位置。如果以r模式打开,执行写操作,会提示io.UnsupportedOperation: not writable

2、w:只写模式
只写,不可读。打开时自动清空原文档。如果以w模式打开执行读操作,会提示io.UnsupportedOperation: not readable

3、a:追加模式
只写,不可读。打开时不清空原文档,指针自动定位到文档末尾。如果以a模式打开执行读操作,会提示io.UnsupportedOperation: not readable

4、r+:读写模式
先读后写。打开文档时不清空原内容,指针定位正在开始位置。读完后指针会移到文档末尾,所以写的时候是追加在文档最后的。不会覆盖原内容。

如果以r+模式打开,但是先写后读,那么写入的内容会覆盖原内容,读取时从写结束位置开始读。如果原文档内容小于新写入的,那么全部被覆盖,读到的为空。如果原文档内容大于新写入的,那么读到的内容为原文档剩下的内容。

5、w+:写读模式
先写后读。打开文档即清空原内容,从文档开头写起,写完后指针自动移到文档末尾,此时进行读取,内容为空。需要将指针移到首位,f.seek(0)。

如果以w+模式打开,先进行读操作,读到的内容也是为空,因为打开即被清空了。

6、a+:追加写读模式
先写后读。追加在原文档末尾,不会清空原内容,写完后指针移到文档末尾,此时进行读取,内容为空。需要将指针移到首位,f.seek(0)。但是即使把指针移到原文档首位,想写入,指针也会自动移到原文档末尾。如代码5
如果以a+模式打开,先进行读操作,读到的内容也是为空,因为打开即把指针定位在文档末尾。

# 代码 5
with open ('test.txt','a+',encoding = "UTF-8") as f:
	# 将指针移至文档首位
	f.seek(0)
	f.write('你好世界')
	f.seek(0)
	print(f.read())

# 结果
HelloWorld你好世界

参考链接:
1、https://www.runoob.com/python/python-files-io.html