Python 文件的读写详解

一、文件对象常用的方法

序号常用方法描述
1file.close()关闭文件。关闭后文件不能再进行读写操作。
2file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有。
3file.readline([size])读取整行,包括 “\n” 字符。
4file.readlines([sizeint])读取所有行并返回列表 ,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
5file.tell()返回文件当前位置。
6file.seek(offset[, from])设置文件当前位置
7file.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

2、https://blog.csdn.net/sinat_41774836/article/details/111290413?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242.1*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值