目录:

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

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

引言

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

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

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

  1. 沉默良久,这个为某种超出人类理解力的力量代言的女人,冷酷地封死了汪淼的一切出路。
  2.  
  3.   “三天后,也就是14日,在凌晨1点钟至5点钟,整个宇宙将为你闪烁。”
  4.  
  5.   他正坐在王府井天主教堂前。在黎明惨白的天空下,教堂的三个罗马式尖顶像三根黑色的巨指,似乎在为他指出冥冥太空中的什么东西。
  6.  
  7.   汪淼起身要走,一阵从教堂传出的圣乐留住了他。今天不是礼拜日,这可能是唱诗班为复活节进行的排练,唱的是这个节日弥撒中常唱的《圣灵光照》。在圣乐的庄严深远中,汪淼再次感到宇宙变小了,变成了一座空旷的教堂,穹顶隐没于背景辐射闪烁的红光中,而他则是这宏伟教堂地板砖缝中的一只小蚂蚁。他感觉到自己那颗颤抖的心灵被一只无形的巨手抚摸着,一时间回了脆弱无助的孩童时代,意识深处硬撑着的某种东西像蜡一样变软了,崩溃了,他双手捂着脸哭了起来。
  8.  
  9.   “如果有人祈求佛主保佑另一个主,这是怎么回事呢?”我问,然后详细地说了事情的经过。
  10.  
  11.   长老默默地看着自己手中的书,但显然没有读,而是在想我说的事,然后他说:“你先出去一会儿,让我想想。”我转身走出门去,知道这很不寻常:长老学识深厚,一般的关于宗教、历史和文化的问题,他都能不假思索地立即回答。我在门外等了有一根烟的时间,长老叫我回去。
  12.  
  13.   “我感觉只有一种可能。”他神色严峻地说。
  14.  
  15.   “什么?会是什么呢?难道可能有这种宗教,它的主需要其教徒祈求其它宗教的主来拯救?”
  16.  
  17.   “她的那个主,是真实存在的。”
  18.  
  19.   我走出长老的门,穿过寺院朝自己的住处走去,这夜是满月,我抬头看看月亮,感觉那是盯着我看的一只银色的怪眼,月光带着一股阴森的寒气。
  20.  
  21.   秦始皇、牛顿、冯.诺伊曼和汪淼站在金字塔顶部的平台上,这个平台与汪淼和墨子相遇时的很相似,架设着大量的天文观测仪器,其中有一部分是欧洲近代的设备。在他们下方,三千万秦国军队宏伟的方阵铺展在大地上,这是一个边长6公里的正方形。在初升的太阳下,方阵凝固了似的纹丝不动,仿佛一张由三千万个兵马俑构成的巨毯,但飞翔的鸟群误入这巨毯上空时,立刻感到了下方浓重的杀气,鸟群顿时大乱,惊慌混乱地退飞或绕行。汪淼在心里算了算,如果全人类站成这样一个方阵,面积也不过是上海浦东大小,比起它表现的力量,这方阵更显示了文明的脆弱。
  22.  
  23.   汪淼听到一种不间断的类似于雷声的轰鸣,这声音是朝歌的大地上许多奇怪的东西发出的,那是一个个巨大的单摆,每个都有几十米高,单摆的摆锤是一块块巨石,被一大束绳索吊在架于两座细高石塔间的天桥上,每座单摆都在摆动中,驱动它们的是一群群身穿盔甲的士兵,每个巨摆下都有这样一群士兵,他们合着奇怪的号子,齐力拉动系在巨石摆锤上的绳索,维持着它的摆动。汪淼发现,所有巨摆的摆动都是同步的,远远看去,这景象怪异得使人着迷,像大地上竖立着一座座走动的钟表,又像自天而降的许多巨大的抽象符号。
  24.  
  25.   “这是伏曦,”纣王对刚进来的周文王和汪淼介绍那位黑衣人,仿佛他们一直就在那儿似的,而黑衣人才是新来的,“他认为,太阳是脾气怪戾的大神,他醒着的时候喜怒无常,是乱纪元;睡着时呼吸均匀,是恒纪元。伏曦建议建起了外面那些大摆,日夜不停地摆动,声称这对太阳神有强烈的催眠作用,能使其陷入漫长的沉睡。但直到现在,我们看到太阳神仍醒着,最多只是不时打打盹。”
  26.  
  27.   一个大人和一个小孩儿站在死于武斗的红卫兵的墓前,那孩子问大人:他们是烈士吗?大人说不是;孩子又问:他们是敌人吗?大人说也不是;孩子再问:那他们是什么?大人说:是历史。
  28.  
  29.   伊文斯高举一只拳头,对着人群喊道:“消灭人类暴政!”
  30.  
  31.   和着涛声和天线在风中的轰鸣,三体战士们齐声高呼:“世界属于三体!”这一天,被公认为地球三体运动的诞生日。

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

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

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

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

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

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

  1. import os # 导入模块
  2. old_str = '罗辑'
  3. new_str = 'LJ'
  4. modify_times = 0 # 统计修改次数
  5. f1 = open('word2.txt','r',encoding='utf-8') # 以“r”(只读)模式打开旧文件
  6. f2 = open('word2_1.txt','w',encoding='utf-8') # 以“w”(写)模式打开或创建新文件(写模式下,文件存在则重写文件,文件不存在则创建文件)
  7. for lines in f1: # 循环读
  8. if old_str in lines:
  9. lines = lines.replace(old_str,new_str) # 新字符串替换旧字符串
  10. modify_times += 1 # 每修改一次就自增一次
  11. f2.write(lines) # 将修改后的内容后的内容写入新文件
  12. print('文件修改的次数:',modify_times) #
  13. f1.close() # 关闭文件f1
  14. f2.close() # 关闭文件f2(同时打开多个文件时,先打开的先关闭,后打开的后关闭)
  15. 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. MySQL数据库服务器整体规划(go)

    我们在搭建MySQL数据库服务器的开始阶段就合理的规划,可以避免以后的很多问题的产生,大大节省我们的时间和精力,在一定幅度上降低成本.当然,这会涉及很多方面.比如机器的选型.业务评估和系统规划等. 所 ...

  2. MySQL的Join使用

    在MySQL(以5.1为例)中,表连接的语法可以参见MySQL官方手册:MySQL官方手册-JOIN 在查询中,连接的语法类似 SELECT select_expr FROM table_refere ...

  3. BASIC-15_蓝桥杯_字符串对比

    示例代码: #include <stdio.h>#define N 10 int main(void){ int i = 0 ; int len1 = 0 , len2 = 0 , fla ...

  4. maven学习(6)-Maven依赖范围

    一.maven依赖范围: classpath 分为三种:编译classpath , 测试classpath , 运行classpath Scope 选项如下: Compile:编译依赖范围.默认就是c ...

  5. 【转载】CSS + DIV 实现整理布局

    HTML CSS + DIV实现整体布局 1.技术目标: 开发符合W3C标准的Web页面 理解盒子模型 实现DIV+CSS整体布局 2.什么是W3C标准? W3C:World Wide Web Con ...

  6. SDL播放音频的时候发现SDL_OpenAudioDevice打开一直失败

    1:在使用SDL播放音频的时候发现SDL_OpenAudioDevice打开一直失败,导致SDL不能进入回调函数. 使用SDL_GetError()打印错误提示XAudio2: XAudio2Crea ...

  7. 半联结&反联结!

    半联结是在两个数据集(表)之间的联结,其中第一个数据集中的数据行在决定是否返回时会根据在另一个数据集中出现或不出现至少一个相匹配的数据行来确定.“不出先”匹配行——这是半联结的一种特殊形式,称为反联结 ...

  8. 浅析PHP7新功能及语法变化总结

    标量类型声明 有两种模式: 强制 (默认) 和 严格模式. 现在可以使用下列类型参数(无论用强制模式还是严格模式): 字符串(string), 整数 (int), 浮点数 (float), 以及布尔值 ...

  9. APIView (DRF的视图)

    APIView和View的区别 -- APIView继承了View -- APIView 重写了as_view以及 dispatch方法 -- 在dispatch里重新封装了request  -- r ...

  10. BAT脚本编写教程(比较易懂和全面)

    这篇文章主要介绍了BAT脚本编写教程,比较易懂和全面.适合有一定编程基础的人   作者不详.敬意! echo.@.call.pause.rem(小技巧:用::代替rem)是批处理文件最常用的几个命令, ...