python以什么方式处理文件-Python文件修改和常用方法

为了更好地说明接下来的文件修改操作,我们有必要先来学习下文件操作的常用方法。

一、文件处理中的常用方法

#!/usr/bin/env python3#-*- coding:utf-8 -*-#write by congcong

#flush() 把文件从内存强制刷新到硬盘

f = open("w_flush.txt",mode="r+")

f.write("这是强制刷新到硬盘的文件!")

f.flush()print("查看文件:",f.read())#f.close()

#readable() 判断是否可读

print(f.readable()) #输出:True

f1 = open("w_flush.txt",mode="w") #文件的写操作

f1.write("判断文件是否可读!")

f1.flush()print(f1.readable()) #输出:False (表明写操作时文件也是不可读的)

#readline() 输出一行,碰到 或者 结束

f = open("w_flush.txt",mode="a",encoding="gbk")

f.write("我是第一行!")

f.write(" 我是第二行!")

f= open("w_flush.txt",mode="r",encoding="gbk")print(f.readline())#输出:我是第一行!

#tell() 返回光标当前位置,以字节为计算单位

print(f.tell()) #输出 ; 14,因为编码为 gbk ,gbk每个中文字符占两个字节,所以此时光标位于第一行末尾

#seek() 将光标移到指定字节位置,以字节为计数单位

print(f.seek(2)) #输出:2

print(f.readline()) #输出;是第一行!

print(f.seek(4)) #输出:4

print(f.readline()) #输出:第一行

#seekable() 判断文件能否seek,linux中使用(一切皆文件)

#read() 括号内指定长度时,就从当前位置开始读几个字符;括号内没有指定长度时,就读全部文件,以字符为单位

print(f.tell())print(f.seek(0))print(f.read(2)) #输出:我是

#truncate() 按指定长度截断文件,括号内指定长度时,就从文件开头开始截断指定长度;不指定长度时,从当前位置到尾部的内容全部去掉#此方法必须是在写模式下使用

f = open("w_flush.txt","r+",encoding="gbk")print(f.seek(4)) #输出;4

print(f.tell()) #输出;4

print(f.truncate(8)) #输出;8

print(f.seek(0)) #输出 :0

f.close()

了解了以上的方法,我们就能愉快地进行文件修改操作了。

二、文件修改操作

当我们以读写(r+)模式打开文件时,,默认会把新增的内容追加到文件最末尾。

这是为什么呢?那我们如果想要修改中间的内容该怎么办呢?

还记得我们刚学过一个tell()方法吗,它的单位是字节,当我们读一段内容的时候,光标会跟着移动,文件读完了,光标就会移到末尾,

再接着写,光标自然会跟着移动,写完后,光标就停留在末尾了,我们可以用tell()方法验证一下猜想,打印此时光标位置,

此时,我们再想读文件内容,就没有任何输出了,都是空白的。这就解释了为何我追加的内容为何无法读出来。

至于为何追加内容会从末尾开始,就容易理解了,当你以追加模式打开文件时,光标会默认移到文件尾部,再开始写。

而文件修改就要用到另一个方法了,seek()方法,它的作用就是移动光标到指定位置,移动的单位是字节,当我们想修改某个地方,

使用seek()方法将光标移到指定位置就可以再修改了,下面我们可以试一下:

#write.txt的原本内容是 :这是第一个我用Python写的文件!#现在我要将"写’改为"修改后’

f= open(file="write.txt",mode="r+",encoding="gbk")print("修改前: ",f.read(),f.tell()) #读出修改前的文件内容,并打印当前光标位置

f.seek(20) #将光标移到第20个字节后的位置(GBK编码一个汉字占2字节,英文占1字节)

f.write("修改后") #写入修改内容

f.seek(0) #将光标移到文件开头

print(f.tell()) #打印当前光标位置

print("修改后: ",f.read(),f.tell()) #读出修改后的文件内容,并打印当前光标位置

f.close()#关闭文件

"""这是第一个我用Python写的文件! 29

0

修改后:

这是第一个我用Python修改后件! 29"""

没有报错,正常执行,"写’ 也的确被改成了 "修改后’ ,文件大小也并未改变,但是也有我们不想修改的内容被覆盖了,这就尴尬了。。。

原因在这里:

这是硬盘的存储原理导致的,当你把文件存到硬盘上,就在硬盘上划了一块空间,存数据,等你下次打开这个文件 ,seek到一个位置,每改一个字,就是把原来的覆盖掉,如果要插入,是不可能的,因为后面的数据在硬盘上不会整体向后移。所以就出现 当前这个情况 ,你想插入,却变成了会把旧内容覆盖掉。

解决方法呢?

想修改当然可以,但是不要在硬盘上修改,把内容全部读到内存里,数据在内存里可以随便增删改查,修改之后,把内容再全部写回硬盘,把原来的数据全部覆盖掉。

例如:

#-*- coding:utf-8 -*-

import os #导入模块

f1= "notebook.txt" #待修改的文件

f2 = "note_new.txt" #修改后的文件

f_old = open(f1,mode="r",encoding="utf-8") #打开待修改的文件

f_new = open(f2,mode="w",encoding="utf-8") #写入修改的文件

old_str= "一" #待修改的字符串

new_str = "one" #修改后的字符串

count = 0 #统计修改次数

for line in f_old: #循环读

if old_str inline:

newline= line.replace("一","one") #替换

count += 1 #每修改一次自增1

else:

newline=line

f_new.write(newline)#写入修改后的文件

f_old.close() #依次关闭

f_new.close()

os.replace("note_new.txt","notebook.txt") #用新文件里的内容替换旧文件

print("修改次数:"count) #修改次数:5

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

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

相关文章

matlab设置工作路径

目录 暂时修改路径 永久修改路径 暂时修改路径 a)直接在页面的路径框里粘贴想进的路径然后 回车 即可 b) 如果只是想暂时将文件夹加入路径,防止函数名字空间污染的话,可采用本方法:用MATLAB运行目标文件夹下任意一个m文件,MATL…

Java System类详解

System 类位于 java.lang 包,代表当前 Java 程序的运行平台,系统级的很多属性和控制方法都放置在该类的内部。由于该类的构造方法是 private 的,所以无法创建该类的对象,也就是无法实例化该类。 System 类提供了一些类变量和类方…

linux入门_linux入门-常用命令的使用

linux入门-常用命令的使用对于命令行的接触,最开始是window下的cmd,比如查看电脑ip地址、进入某一个文件夹、下载npm模块等等window cmdwindow ipconfig对于习惯了window桌面操作系统的用户来说,其实是比较少接触到命令行的,而在l…

MATLAB遇到问题:错误使用eval,未定义与‘struct‘类型的输入参数相对应的函数‘workspacefunc‘

安装好什么也没干,就开始报错,命令行窗口输入什么都是错误 错误使用eval 未定义与’struct’类型的输入参数相对应的函数’workspacefunc’ 解决方法: 在命令行窗口分别输入下面语句,箭头可不是哦,只有加粗部分是 &…

广西壮族自治区直流充电桩说明书下载_鄂州便携式直流充电桩

安徽能通新能源科技有限公司坐落在一座美丽宜居的城市中。在我国东部地区、长江下游、巢湖之滨,横贯连接京台高速、沪蓉高速、沪陕高速、合徐高速、京合高铁、合宁高铁、合福高铁、合武高铁、京九铁路、宁西铁路并与世界有名的自然和文化遗产—黄山风景区毗邻&#…

Java多维数组

除了一维数组和二维数组外,Java 中还支持更多维的数组,如三维数组、四维数组和五维数组等,它们都属于多维数组。想要提高数组的维数,只要在声明数组时将索引与中括号再加一组即可,所以三维数组的声明为 int score[][][…

三大相关性分析之matlab

目录 1.简介 2.Pearson相关系数 算法详解 程序实现 3.Kendall相关系数 算法详解 程序实现 4.Spearman相关系数 算法详解 程序实现 1.简介 相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性的元素之…

java反编译工具_Java开发必会的反编译知识(附支持对Lambda进行反编译的工具)...

我之前推送过Java代码的编译与反编译,其中简单的介绍了Java编译与反编译相关的知识,最近给GitChat写《深入分析Java语法糖》的时候,又用到了很多反编译相关的知识,遂发现哪篇文章已有些过时。于是,这篇文章就这样呈现在…

Java不规则数组

多维数组被解释为是数组的数组,所以因此会衍生出一种不规则数组。 规则的 43 二维数组有 12 个元素,而不规则数组就不一定了。如下代码静态初始化了一个不规则数组。 int intArray[][] {{1,2}, {11}, {21,22,23}, {31,32,33}};**高维数组(…

三大相关性分析之python

目录 1.简介 2.Pearson相关系数 算法详解 程序实现 3.Kendall相关系数 算法详解 程序实现 4.Spearman相关系数 算法详解 程序实现 1.简介 相关性分析是指对两个或多个具备相关性的变量元素进行分析,从而衡量两个变量因素的相关密切程度。相关性的元素之…

c语言实现http服务器_基于postman实现http接口测试过程解析_服务器其它

这篇文章主要介绍了基于postman实现http接口测试过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通…

Java比较数组

数组相等的条件不仅要求数组元素的个数必须相等,而且要求对应位置的元素也相等。Arrays 类提供了 equals() 方法比较整个数组。语法如下: Arrays.equals(arrayA, arrayB);其中,arrayA 是用于比较的第一个数组,arrayB 是用于比较的…

组合赋权法之matlab

目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标正向化 3.3 数据范围标准化 3.4 计算主观权重 3.5 计算客观权重 3.6 计算组合权重 3.7 计算得分 …

Java数组填充

Arrays 类提供了一个 fill() 方法,可以在指定位置进行数值填充。fill() 方法虽然可以填充数组,但是它的功能有限制,只能使用同一个数值进行填充。语法如下: Arrays.fill(array,value);其中,array 表示数组&#xff0c…

组合赋权法之python

目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算主观权重 2.4 计算客观权重 2.5 计算组合权重 2.6 计算的得分 3.实例分析 3.1 读取数据 3.2 指标正向化 3.3 数据范围标准化 3.4 计算主观权重 3.5 计算客观权重 3.6 计算组合权重 3.7 计算得分…

wps分享为什么要登入_[win]为什么你需要便携应用?portableapps让你得心应手.

利益不相关:不过是一个免费软件的消费者和受益者Q: 想象一下,在你数据突然坏掉,无计可施的时候该怎么办?A:不用担心! portable apps 中有数据恢复软件 file recoveryrcvPortable (免费软件) - 文件恢复 with RecuvaWise Data Recovery Portable (免费软件) - 数据文件恢复现在…

Java求数组元素的最大和最小值

求数组的最大和最小值 public class Example{public static void main(String[] args) {int score[] { 67, 89, 87, 69, 90, 100, 75, 90 }; // 初始化数组int max 0; // 定义变量保存到最大值int min 0; // 定义变量保存到最小值max min score[0]; // 把第1个元素的内容…

蒙特卡罗模拟法 —— matlab

目录 1.简介 2.实例分析 2.1 模拟求近似圆周率 2.2 估算定积分 2.3 求解整数规划 1.简介 蒙特卡洛又称随机抽样或统计试验,就是产生随机变量,带入模型算的结果,寻优方面,只要模拟次数够多,最终是可以找到最优解或…

浏览器打开出现证书错误_2分钟轻松解决ie证书错误

我们日常在用IE上网的时候,可能会出现IE证书错误的提示,对于电脑小白来说会很痛苦,不妨跟小编一起学习,学会了下次就知道怎么解决了,下面就告诉大家,如何解决显示IE网页证书错误最基本的方法!其…

蒙特卡罗模拟法 —— python

目录 1.简介 2.实例分析 2.1 模拟求近似圆周率 2.2 估算定积分 2.3 求解整数规划 1.简介 蒙特卡洛又称随机抽样或统计试验,就是产生随机变量,带入模型算的结果,寻优方面,只要模拟次数够多,最终是可以找到最优解或…