对已有文件进行既读又写的操作时关于文件位置注意事项(适用于Python和C/C++)

本文详细介绍了文件读写操作的各种模式,包括r+, w+, a+, rb+, wb+, ab+等,解释了每种模式下的读写特性及对文件存在性的处理方式。特别强调了在对同一文件进行读写操作时,文件读写位置的重要性,并通过实例演示了如何修改数独游戏数据文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们需要对现有文件进行读取数据并修改文件中的数据时,就需要用到对已有文件进行既读又写的操作。有多种可读且可写的文件打开方式:r+,w+,a+,rb+,wb+,ab+,具体含义见下表。

打开

方式

读写

特性

文件数据

特性

对文件存在性的处理方式

备注

文件已存在

文件不存在

r

只读

文本文件

必须已存在

打开失败

 

w

只写

文本文件

覆盖原文件

创建新文件

 

a

只写

文本文件

不覆盖原文件

创建新文件

在文件末尾追加写数据。

rb

只读

二进制文件

必须已存在

打开失败

 

wb

只写

二进制文件

覆盖原文件

创建新文件

 

ab

只写

二进制文件

不覆盖原文件

创建新文件

在文件末尾追加写数据。

r+

读写

文本文件

必须已存在

打开失败

 

w+

读写

文本文件

覆盖原文件

创建新文件

 

a+

读写

文本文件

不覆盖原文件

创建新文件

在文件末尾追加写数据。

rb+

读写

二进制文件

必须已存在

打开失败

 

wb+

读写

二进制文件

覆盖原文件

创建新文件

 

ab+

读写

二进制文件

不覆盖原文件

创建新文件

在文件末尾追加写数据。

(上表中的读写方式助记:r--read,读,  w--write,写,  a--append或attach,追加,  b--binary,二进制)

 

在此强调的是在对打开的同一个文件进行即读又写操作时,关于文件读写位置需要注意的事项。

下面以用r+方式打开的读写已经存在的文本文件为例。需要注意一点的是,读操作和写操作是共用一个文件位置指示的。也就是说文件操作没有分别指示读位置和写位置指示的,只有一个文件位置指示。因此,如果读操作和写操作交替进行,那么,上次的读操作结束时所在的读写位置,默认就是下次写操作时的文件读写位置的开始,相应地,上次的写操作结束的位置,默认就是下次读操作开始的位置。如果这种默认文件读写位置不能满足你的实际需要的话,必须用所操作文件对象的see(offset,whence)方法,将文件读写位置按自己的需要进行定位,此函数参数offset为偏移量,可正负,参数whence表示offset相对的基准位置,取值0,1,-1,分别表示文件开头,当前位置和文件末尾。

实例,将数独游戏数据文件中一行的81个数字,修改成9行,每行9个数字。

程序如下:

fObj = open(fileName, 'r+')

lines = fObj.readlines()

fObj.seek(0,0)

for aLine in lines:

    fObj.write(aLine)

    fObj.write('\n')

fObj.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值