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

当我们需要对现有文件进行读取数据并修改文件中的数据时,就需要用到对已有文件进行既读又写的操作。有多种可读且可写的文件打开方式: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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[原]JS ajax类的三种封装形式及简单对比

三种形式:1 function(para1,para2,...)2 function()在里面定义prototype,每次调用前先new一下3 类似于JSON的方式JSON的形式,定义出来的相当于静态类,用for循环,做20次调用, 第一种形式 返回了20个结果。第…

Quaruts II 增量编译

http://bbs.ednchina.com/BLOG_ARTICLE_3007977.HTM http://quartushelp.altera.com/11.1/mergedProjects/msgs/msgs/esgn_tri_state_partition.htm 增量编译主要有两个工具:Design Partition和Logiclock Design Partition只是将设计进行“逻辑分区”,直…

python中变量名存储在哪里_python – 如何在内部存储和映射变量名称?

I think at a high level it can be done with a dict, where the key is the variable name (str?) and the value is the reference that it’s associated with.这也是它内部工作的方式.在CPython中,变量名和它们指向的对象通常存储在Python字典中;编写Python代码时可以使用…

【译】CodeIgniter HMVC模块扩展使用文档

CodeIgniter HMVC扩展说明 原文地址:Modular Extensions - HMVC 模块扩展——HMVC 模块扩展让CodeIgniter框架模块化。模块是一组独立的组件(通常有模型、控制器和视图),它们被分类在应用模块的子文件夹中,并且能够直接…

Python嵌套列表解析式(又称列表推导式)写法剖析与应用举例

#嵌套列表解析式又称嵌套列表推导式,功能非常强大,但是初学者难以摸清其书写规则。 #以下实例展示了嵌套列表解析的写法。 #嵌套列表解析表达是的书写规则是层层嵌套。 #嵌套层的一般形式为:for outter in inner。根据需要解析的嵌套层次深度…

C#中的委托和事件

using System; using System.Collections.Generic; using System.Linq; using System.Text;namespace Study_05_Observer设计模式 {// 计数器public class Counter{int x;int y;//声明委托public delegate void CountEventHandler(object sender, CountEventArgs e);public eve…

python函数参数类型及顺序_python函数参数类型及其顺序

根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY、POSITIONAL_OR_KEYWORD、VAR_POSITIONAL、KEYWORD_ONLY、VAR_KEYWORD。如图:POSITIONAL_ONLY:参数值…

JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)

原文:JS组件系列——Bootstrap Table 表格行拖拽(二:多行拖拽)前言:前天刚写了篇JS组件系列——Bootstrap Table 表格行拖拽,今天接到新的需要,需要在之前表格行拖拽的基础上能够同时拖拽选中的多行。博主用…

Python利用matplotlib.animation和matplotlib.pyplot和ffmpeg录制动画并保存为MP4文件

因为需要将结果动画保存为MP4视频文件需要ffmepg软件的的支持。 一:安装ffmpeg软件: ffmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方…

Chapter 4 : 单行函数

SELECT LOWER(SQL: Structural Query Language)from dual;//dual 是一个虚表(伪表)。UPPER(列名|表达式)SELECT UPPER(sql is used exclusively in rdbmses)from dual;SELECT INITCAP(sql is an ENGLISH LIKE language)from dual;Output: Sql Is An English Like Languageselec…

黑马训练营自学笔记(03)

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ---------------------- 对ViewState的一些认识 因为Http协议是一总无状态记忆的协议,即服务器不会知道上次可客户端请求的内容。WebForm中许多服务端控件的实现依靠的就是Vie…

scrapy知乎爬虫mysql存储项目_Scrapy爬虫框架第八讲【项目实战篇:知乎用户信息抓取】--本文参考静觅博主所写...

思路分析:(1)选定起始人(即选择关注数和粉丝数较多的人--大V)(2)获取该大V的个人信息(3)获取关注列表用户信息(4)获取粉丝列表用户信息(5)重复(2)(3)(4)步实现全知乎用户爬取实战演练:(1)、创建项目:scrapy startproject zhijutest(2)、创建爬…

pyplot输出的绘图界面中文乱码的解决方案

解决办法很简单,明确设置并使用特定的中文字体即可。具体来说,分两步: 第一步:生成指定的字体属性对象。此对象名在下例中为fp。 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties #注意路…

kali下生成web端后门

很多时候在***测试时选择web***害怕用的别人的马带有后门,这样自己的辛苦就要被别人不劳而获,很多时候我们都想拥有自己的马,那么这个时候你就应该使用kail来生成一个自己独特密码的web***了。Kali Linux自带有好几个web***生成工具&#xff…

童儿的故事(二)

回来的路上, 又看到昨天那个望桔的童儿。 “怎么,你还在胡思乱想?”我问他。 “我想,至少我可以望一望它。”顺势他把苹果搂的更紧。 得不到的时候也许会让一个人懂得珍惜, 即便他不懂得满足。 他喃喃道:“…

sql2008能否打开mysql数据库_SQL Server 2008通过LinkServer访问MySQL数据库

(中国软件网讯)怎样让SQL Server 2008数据库可以访问MySQL数据库的数据呢?其实这一实现的过程并不难,可以通过调用MySQL的ODBC驱动,在SQL Server中添加LinkServer的方式实现。本文我们就介绍了这一访问过程,现在我们就开始介绍&am…

素性测试的Miller-Rabin算法完全解析 (C语言实现、Python实现)

因为文中存在公式&#xff0c;只能用图片方式上传了&#xff01; 以下为C语言源代码&#xff1a; #include <stdio.h> typedef long long unsigned LLU; typedef int BOOL; #define TRUE 1 #define FALSE 0 BOOL isPrime(LLU n) { //这是传统的方法&#xff0c;用于与…

MongoDB源码阅读之ReplSet源码分析

1. ReplSet源码结构 rs_config.h replSet间同步设置的工具类 rs_member.h 心跳检测类和replSet成员状态的定义 rs_sync.h 同步数据类 rs.h 定义了几乎所有replSet相关的类&#xff08;Member:replSet中的节点成员&#xff0c; GhostSync&#xff1a;备份同步类&#xff0c;Rep…

C# 字符串性能

Written By Dr Herbie [2] Translated By Allen Lee Introduction 你在代码中处理字符串的方法可能会对性能产生令人吃惊的影响。程序中需要考虑两个由于使用字符串而产生的问题&#xff1a;临时字符串变量的使用和字符串连接。Background1.String是引用类型&#xff0c;在堆上…

手把手教你部署VSAN见证虚拟设备 (Cormac)

译者注&#xff1a;本文翻译自Cormac的博客&#xff0c;并未严格地逐字逐句的直译&#xff0c;如有谬误&#xff0c;万望见谅。原文见此http://cormachogan.com/2015/09/14/step-by-step-deployment-of-the-vsan-witness-appliance/现在开始在之前的帖子中我曾经介绍过见证虚拟…