目录:

  一、以占用内存的方式修改文件

  二、以占用硬盘的方式修改文件

引言

  文件修改的方法从操作方式上大致可以分为两类,一种是以占用电脑内存的方式,将文件读取到内存中修改再存回硬盘;第二种方法是分别打开和新建一个文件,修改文件后写入到新的文件中,直接保存到硬盘,即占用硬盘的方式。下面我们分别来探讨一下两种方法。

一、以占用内存的方式修改文件

  待修改的文件 word1.txt,文件内容如下:

沉默良久,这个为某种超出人类理解力的力量代言的女人,冷酷地封死了汪淼的一切出路。

  “三天后,也就是14日,在凌晨1点钟至5点钟,整个宇宙将为你闪烁。”

  他正坐在王府井天主教堂前。在黎明惨白的天空下,教堂的三个罗马式尖顶像三根黑色的巨指,似乎在为他指出冥冥太空中的什么东西。

  汪淼起身要走,一阵从教堂传出的圣乐留住了他。今天不是礼拜日,这可能是唱诗班为复活节进行的排练,唱的是这个节日弥撒中常唱的《圣灵光照》。在圣乐的庄严深远中,汪淼再次感到宇宙变小了,变成了一座空旷的教堂,穹顶隐没于背景辐射闪烁的红光中,而他则是这宏伟教堂地板砖缝中的一只小蚂蚁。他感觉到自己那颗颤抖的心灵被一只无形的巨手抚摸着,一时间回了脆弱无助的孩童时代,意识深处硬撑着的某种东西像蜡一样变软了,崩溃了,他双手捂着脸哭了起来。

  “如果有人祈求佛主保佑另一个主,这是怎么回事呢?”我问,然后详细地说了事情的经过。

  长老默默地看着自己手中的书,但显然没有读,而是在想我说的事,然后他说:“你先出去一会儿,让我想想。”我转身走出门去,知道这很不寻常:长老学识深厚,一般的关于宗教、历史和文化的问题,他都能不假思索地立即回答。我在门外等了有一根烟的时间,长老叫我回去。

  “我感觉只有一种可能。”他神色严峻地说。

  “什么?会是什么呢?难道可能有这种宗教,它的主需要其教徒祈求其它宗教的主来拯救?”

  “她的那个主,是真实存在的。”

  我走出长老的门,穿过寺院朝自己的住处走去,这夜是满月,我抬头看看月亮,感觉那是盯着我看的一只银色的怪眼,月光带着一股阴森的寒气。

  秦始皇、牛顿、冯.诺伊曼和汪淼站在金字塔顶部的平台上,这个平台与汪淼和墨子相遇时的很相似,架设着大量的天文观测仪器,其中有一部分是欧洲近代的设备。在他们下方,三千万秦国军队宏伟的方阵铺展在大地上,这是一个边长6公里的正方形。在初升的太阳下,方阵凝固了似的纹丝不动,仿佛一张由三千万个兵马俑构成的巨毯,但飞翔的鸟群误入这巨毯上空时,立刻感到了下方浓重的杀气,鸟群顿时大乱,惊慌混乱地退飞或绕行。汪淼在心里算了算,如果全人类站成这样一个方阵,面积也不过是上海浦东大小,比起它表现的力量,这方阵更显示了文明的脆弱。

  汪淼听到一种不间断的类似于雷声的轰鸣,这声音是朝歌的大地上许多奇怪的东西发出的,那是一个个巨大的单摆,每个都有几十米高,单摆的摆锤是一块块巨石,被一大束绳索吊在架于两座细高石塔间的天桥上,每座单摆都在摆动中,驱动它们的是一群群身穿盔甲的士兵,每个巨摆下都有这样一群士兵,他们合着奇怪的号子,齐力拉动系在巨石摆锤上的绳索,维持着它的摆动。汪淼发现,所有巨摆的摆动都是同步的,远远看去,这景象怪异得使人着迷,像大地上竖立着一座座走动的钟表,又像自天而降的许多巨大的抽象符号。

  “这是伏曦,”纣王对刚进来的周文王和汪淼介绍那位黑衣人,仿佛他们一直就在那儿似的,而黑衣人才是新来的,“他认为,太阳是脾气怪戾的大神,他醒着的时候喜怒无常,是乱纪元;睡着时呼吸均匀,是恒纪元。伏曦建议建起了外面那些大摆,日夜不停地摆动,声称这对太阳神有强烈的催眠作用,能使其陷入漫长的沉睡。但直到现在,我们看到太阳神仍醒着,最多只是不时打打盹。”

  一个大人和一个小孩儿站在死于武斗的红卫兵的墓前,那孩子问大人:他们是烈士吗?大人说不是;孩子又问:他们是敌人吗?大人说也不是;孩子再问:那他们是什么?大人说:是历史。

  伊文斯高举一只拳头,对着人群喊道:“消灭人类暴政!”

  和着涛声和天线在风中的轰鸣,三体战士们齐声高呼:“世界属于三体!”这一天,被公认为地球三体运动的诞生日。

  我现在要将文中的“汪淼”修改为“WM”,代码如下:

#!-*-coding:utf-8-*-
old_str = '汪淼'
new_str = 'WM'
f1 = open('word1.txt','r+',encoding="utf-8") # 以读写方式打开,可读可写
data = f1.read() # 读取文件内容
print(f1.tell()) # 4574 tell() 方法返回文件的当前位置,即文件指针当前位置。
f1.seek(0) # seek() 方法用于移动文件读取指针到指定位置。
for i in data: # 循环读取
if old_str in data:
data=data.replace(old_str,new_str) # 用新字符串替换旧字符串
print(data) # 打印修改后的内容
f1.write(data) # 向文件中写入内容(data),默认是utf-8
f1.truncate() # 用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。
f1.close() # 关闭文件

二、以占用硬盘的方式修改文件

  待修改的文件 word2.txt,文件内容如下:

一片白云,云被风吹到波束范围外后就消散了,但新的云仍不断在波束内产生,使得那一片圆形的天空像是通向另一个云雾宇宙的时空蚀洞,孩子看到后说它像 一位巨人爷爷的白头发。
罗辑和庄颜跟着在草地上奔跑的孩子,来到了天线下面。最初的两个引力波系统分别建在欧洲和北美,它们的天线采用磁悬浮,只能从基座上悬起几厘米;而这个天线采用反重力,如果愿意,它可以一直升到太空中。
三人站在天线下方 的草地向上望,巨大的圆柱体从他们头顶向前方伸延,像是从两侧向上卷曲的天空。
由于半径很大,底面弧度很小,上面的映像并不失真。
这时夕阳已经照到天线下面,罗辑在映像中看到庄颜的长发和白裙在金色的阳光中飘动,像一个从天 空俯视地面的天使。
罗辑把孩子举起来,她的小手摸到了天线光洁的表面,她使劲向一个方向推着。
“我能让它转起来吗?”
“如果你推的时间足够长,它会转的。”庄颜回答,然后微笑着看着罗辑问,“是吗?”
罗辑对庄颤点点头:“如果时间足够长,她能推动地球呢。”
像已经无数次发生过的那样,他们的目光又交织在一起,这是两个世纪前在蒙娜丽莎的微笑中那次对视的继续。
他们发现庄颜设想的目光语言真的变成了现实,或者说相爱的人类早就拥有了这种语言。
当他们对视时,丰富的涵义从目光 中涌出,就像引力波束形成的云之井中涌出的白云一般,无休无止。
但这不是这个世界的语言,它本身就构筑了一个使自己有意义的世界,只有在那个玫瑰色的世界中,这种语言的所有词汇才能找到对应物。
那个世界中的每一个人都是上帝, 都能在瞬间数清沙漠中的每一粒沙并记住它们,都能把星星串成晶莹的项链挂到爱人的颈上...
这就是爱吗?
这行字显现在他们旁边一个突然出现的低维展开的智子上,这个镜面球体仿佛是上方的圆柱体某处融化后滴下的一滴。
罗辑认识的三体人并不多,不知道现在与他对话的是谁,不知道这位外星人是在三体世界还是在日益远离太阳系的舰队中。
“应该是吧。”罗辑徽笑着点点头。
罗辑博士,我是来向你抗议的。
“为什么?”
因为在昨天晚上的演讲中,你说人类迟迟未能看清宇宙的黑暗森林状态,并不是由于文明进化不成熟而缺少宇宙意识,而是因为人类有爱。
“这不对吗?”
对,虽然“爱”这个词用在科学论述中涵义有些模糊,但你后面的一句话就不对了,你说很可能人类是宇宙中唯一拥有爱的种族,正是这个想法,支撑着你走完了自己面壁者使命中最艰难的一段。
“当然,这只是一种表达方式,一种不严格的...比喻而已。”
至少我知道三体世界也是有爱的,但因其不利于文明的整体生存而被压制在 萌芽状态,但这种萌芽的生命力很顽强,会在某些个体身上成长起来。
“请问您是...”
我们以前不认识,我是两个半世纪前曾向地球发出誓告的监听员。
“天啊,您还活着?”庄颜惊叫道。
也活不了多长时间了,我一直处于脱水状态,但这么长的岁月,脱水的机体也会老化。
不过我真的看到了自己想着的未来,我感到很幸福。
“请接受我们的敬意。”罗辑说。
我只是想和您讨论一种可能:也许爱的萌芽在宇宙的其他地方也存在,我们 应该到处鼓励她的萌发和成长。
“为此我们可以冒险。”
对,可以冒险。
“我有一个梦,也许有一天,灿烂的阳光能照进黑暗森林。”
这时,这里的太阳却在落下去,现在只在远山上露出顶端的一点,像山顶上镶嵌着的一块光灿灿的宝石。
孩子已经跑远,同草地一起沐浴在金色的晚霞之中。
太阳快落下去了,你们的孩子居然不害怕?
“当然不害怕,她知道明天太阳还会升起来的。”

  将文中的 “罗辑” 修改为 “LJ”,代码如下:

import os  # 导入模块
old_str = '罗辑'
new_str = 'LJ'
modify_times = 0 # 统计修改次数
f1 = open('word2.txt','r',encoding='utf-8') # 以“r”(只读)模式打开旧文件
f2 = open('word2_1.txt','w',encoding='utf-8') # 以“w”(写)模式打开或创建新文件(写模式下,文件存在则重写文件,文件不存在则创建文件)
for lines in f1: # 循环读
if old_str in lines:
lines = lines.replace(old_str,new_str) # 新字符串替换旧字符串
modify_times += 1 # 每修改一次就自增一次
f2.write(lines) # 将修改后的内容后的内容写入新文件
print('文件修改的次数:',modify_times) #
f1.close() # 关闭文件f1
f2.close() # 关闭文件f2(同时打开多个文件时,先打开的先关闭,后打开的后关闭)
os.replace('word2_1.txt','word2.txt') # 修改(替换)文件名

  值得注意的是,用于替换的字符串字节总数(UTF-8编码中,一个英文字符占1个字节,一个中文字符占3个字节;GBK编码中,中英文都占两个字节)不得超过待替换的字符串,如果超过,就会覆盖部分原文件内容,这是由硬盘的读写机制决定的,所以,关于这一点我们在使用文件修改时,必须十分小心,及时备份,防止文件丢失。

Python修改文件的两种方法的更多相关文章

  1. python 修改文件内容3种方法

    原文链接:https://www.cnblogs.com/wc-chan/p/8085452.html def alter(file,old_str,new_str): ""&qu ...

  2. MySQL命令执行sql文件的两种方法

    MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...

  3. oracle rename数据文件的两种方法

    oracle rename数据文件的两种方法 2012-12-11 20:44 10925人阅读 评论(0) 收藏 举报  分类: oracle(98)  版权声明:本文为博主原创文章,未经博主允许不 ...

  4. [转载]C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 by 大龙哥 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char ...

  5. .net中创建xml文件的两种方法

    .net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...

  6. C#读写txt文件的两种方法介绍

    C#读写txt文件的两种方法介绍 1.添加命名空间 System.IO; System.Text; 2.文件的读取 (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出 ...

  7. spring 配置文件 引入外部的property文件的两种方法

    spring  的配置文件 引入外部的property文件的两种方法 <!-- 引入jdbc配置文件    方法一 --> <bean id="propertyConfig ...

  8. 合并BIN文件的两种方法(转)

    源:http://blog.chinaunix.net/uid-20745340-id-1878803.html 合并BIN文件的两种方法 在单片机的开发过程中,经常需要将两个单独的BIN文件合并成一 ...

  9. Linux下查看alert日志文件的两种方法

    --linux下查看alert日志文件的两种方法: --方法1: SQL> show parameter background_dump_dest; NAME TYPE VALUE ------ ...

随机推荐

  1. 大快DKH大数据智能分析平台监控参数说明

    2018年国内大数据公司50强榜单排名已经公布了出来,大快以黑马之姿闯入50强,并摘得多项桂冠.Hanlp自然语言处理技术也荣膺了“2018中国数据星技术”奖.对这份榜单感兴趣的可以找一下看看.本篇承 ...

  2. ionic使用常见问题(八)——PHP无法获取$http的post数据

    一个简单的post请求 $http.post('do-submit.php',myData) .success(function(){ // some code });   可是,用angularjs ...

  3. C# 日期格式化的中的(/)正斜杠的问题(与操作系统设置有关)

    Console.WriteLine(DateTime.Now.ToString("yyyy/MM/dd" )); //这行代码, 如果你在系统日期格式默认的情况下输出 2013/0 ...

  4. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  5. C# winfrom ComboBox 调整下拉菜单的高度

    1.设置属性 // 1.属性设置 DrawMode ->OwnerDrawVariable this.cboBoxPostID.DrawMode = System.Windows.Forms.D ...

  6. 9-16Jenkins-2定时任务

    定时任务 选择定时任务,点击 "?" 会弹出使用教程,但讨厌英语的人,自然选择现成的中文. 猪脚踏浪https://www.cnblogs.com/zsg88/p/9178625. ...

  7. [UE4]GameMode

    GameMode定义了正在玩的游戏规则,积分等方面,游戏中有些数据和逻辑不适合放在某一个对象身上,这些数据在整个游戏运行中腰持续存在的(比如:积分.排名). 每次游戏一启动,GameMode就被创建, ...

  8. javascript继承之借用构造函数(二)

    //简单的函数调用 function Father() { this.nums= [1,2]; } function Son() { Father.call(this);//调用超类型,完成son继承 ...

  9. Spark学习笔记5:Spark集群架构

    Spark的一大好处就是可以通过增加机器数量并使用集群模式运行,来扩展计算能力.Spark可以在各种各样的集群管理器(Hadoop YARN , Apache Mesos , 还有Spark自带的独立 ...

  10. 【BZOJ】4517 [Sdoi2016]排列计数(数学+错排公式)

    题目 传送门:QWQ 分析 $ O(nlogn) $预处理出阶乘和阶乘的逆元,然后求组合数就成了$O(1)$了. 最后再套上错排公式:$ \huge d[i]=(i-1) \times (d[i-1] ...