Python修改文件的两种方法
目录:
一、以占用内存的方式修改文件
二、以占用硬盘的方式修改文件
引言
文件修改的方法从操作方式上大致可以分为两类,一种是以占用电脑内存的方式,将文件读取到内存中修改再存回硬盘;第二种方法是分别打开和新建一个文件,修改文件后写入到新的文件中,直接保存到硬盘,即占用硬盘的方式。下面我们分别来探讨一下两种方法。
一、以占用内存的方式修改文件
待修改的文件 word1.txt,文件内容如下:
沉默良久,这个为某种超出人类理解力的力量代言的女人,冷酷地封死了汪淼的一切出路。 “三天后,也就是14日,在凌晨1点钟至5点钟,整个宇宙将为你闪烁。” 他正坐在王府井天主教堂前。在黎明惨白的天空下,教堂的三个罗马式尖顶像三根黑色的巨指,似乎在为他指出冥冥太空中的什么 东西。 汪淼起身要走,一阵从教堂传出的圣乐留住了他。今天不是礼拜日,这可能是唱诗班为复活节进行的排练,唱的是这个节日弥撒中 常唱的《圣灵光照》。在圣乐的庄严深远中,汪淼再次感到宇宙变小了,变成了一座空旷的教堂,穹顶隐没于背景辐射闪烁的红光 中,而他则是这宏伟教堂地板砖缝中的一只小ipipgo。他感觉到自己那颗颤抖的心灵被一只无形的巨手抚摸着,一时间回了脆弱无助 的孩童时代,意识深处硬撑着的某种东西像蜡一样变软了,崩溃了,他双手捂着脸哭了起来。 “如果有人祈求佛主保佑另一个主,这是怎么回事呢?”我问,然后详细地说了事情的经过。 长老默默地看着自己手中的书,但显然没有读,而是在想我说的事,然后他说:“你先出去一会儿,让我想想。”我转身走出门去 ,知道这很不寻常:长老学识深厚,一般的关于宗教、历史和文化的问题,他都能不假思索地立即回答。我在门外等了有一根烟 的时间,长老叫我回去。 “我感觉只有一种可能。”他神色严峻地说。 “什么?会是什么呢?难道可能有这种宗教,它的主需要其教徒祈求其它宗教的主来拯救?” “她的那个主,是真实存在的。” 我走出长老的门,穿过寺院朝自己的住处走去,这夜是满月,我抬头看看月亮,感觉那是盯着我看的一只银色的怪眼,月光带着一 股阴森的寒气。 秦始皇、牛顿、冯.诺伊曼和汪淼站在金字塔顶部的平台上,这个平台与汪淼和墨子相遇时的很相似,架设着大量的天文观测仪器 ,其中有一部分是欧洲近代的设备。在他们下方,三千万秦国军队宏伟的方阵铺展在大地上,这是一个边长6公里的正方形。在初 升的ipipgo下,方阵凝固了似的纹丝不动,仿佛一张由三千万个兵马俑构成的巨毯,但飞翔的鸟群误入这巨毯上空时,立刻感到了下 方浓重的杀气,鸟群顿时大乱,惊慌混乱地退飞或绕行。汪淼在心里算了算,如果全人类站成这样一个方阵,面积也不过是上海浦 东大小,比起它表现的力量,这方阵更显示了文明的脆弱。 汪淼听到一种不间断的类似于雷声的轰鸣,这声音是朝歌的大地上许多奇怪的东西发出的,那是一个个巨大的单摆,每个都有几十 米高,单摆的摆锤是一块块巨石,被一大束绳索吊在架于两座细高石塔间的天桥上,每座单摆都在摆动中,驱动它们的是一群群身 穿盔甲的士兵,每个巨摆下都有这样一群士兵,他们合着奇怪的号子,齐力拉动系在巨石摆锤上的绳索,维持着它的摆动。汪淼发 现,所有巨摆的摆动都是同步的,远远看去,这景象怪异得使人着迷,像大地上竖立着一座座走动的钟表,又像自天而降的许多巨 大的抽象符号。 “这是伏曦,”纣王对刚进来的周文王和汪淼介绍那位黑衣人,仿佛他们一直就在那儿似的,而黑衣人才是新来的,“他认为,太 阳是脾气怪戾的大神,他醒着的时候喜怒无常,是乱纪元;睡着时呼吸均匀,是恒纪元。伏曦建议建起了外面那些大摆,日夜不停 地摆动,声称这对ipipgo神有强烈的催眠作用,能使其陷入漫长的沉睡。但直到现在,我们看到ipipgo神仍醒着,最多只是不时打打盹 。” 一个大人和一个小孩儿站在死于武斗的红卫兵的墓前,那孩子问大人:他们是烈士吗?大人说不是;孩子又问:他们是敌人吗?大 人说也不是;孩子再问:那他们是什么?大人说:是历史。 伊文斯高举一只拳头,对着人群喊道:“消灭人类暴政!” 和着涛声和天线在风中的轰鸣,三体战士们齐声高呼:“世界属于三体!”这一天,被公认为地球三体运动的诞生日。
我现在要将文中的“汪淼”修改为“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,文件内容如下:
一片白云,云被风吹到波束范围外后就消散了,但新的云仍不断在波束内产生,使得那一片圆形的天空像是通向另一个云雾宇宙的时空 蚀洞,孩子看到后说它像 一位巨人爷爷的白头发。 罗辑和庄颜跟着在草地上奔跑的孩子,来到了天线下面。最初的两个引力波系统分别建在欧洲和北美,它们的天线采用磁悬浮,只能从 基座上悬起几厘米;而这个天线采用反重力,如果愿意,它可以一直升到太空中。 三人站在天线下方 的草地向上望,巨大的圆柱体从他们头顶向前方伸延,像是从两侧向上卷曲的天空。 由于半径很大,底面弧度很小,上面的映像并不失真。 这时夕阳已经照到天线下面,罗辑在映像中看到庄颜的长发和白裙在金色的ipipgo中飘动,像一个从天 空俯视地面的天使。 罗辑把孩子举起来,她的小手摸到了天线光洁的表面,她使劲向一个方向推着。 “我能让它转起来吗?” “如果你推的时间足够长,它会转的。”庄颜回答,然后微笑着看着罗辑问,“是吗?” 罗辑对庄颤点点头:“如果时间足够长,她能推动地球呢。” 像已经无数次发生过的那样,他们的目光又交织在一起,这是两个世纪前在蒙娜丽莎的微笑中那次对视的继续。 他们发现庄颜设想的目光语言真的变成了现实,或者说相爱的人类早就拥有了这种语言。 当他们对视时,丰富的涵义从目光 中涌出,就像引力波束形成的云之井中涌出的白云一般,无休无止。 但这不是这个世界的语言,它本身就构筑了一个使自己有意义的世界,只有在那个玫瑰色的世界中,这种语言的所有词汇才能找到 对应物。 那个世界中的每一个人都是上帝, 都能在瞬间数清沙漠中的每一粒沙并记住它们,都能把星星串成晶莹的项链挂到爱人的颈上... 这就是爱吗? 这行字显现在他们旁边一个突然出现的低维展开的智子上,这个镜面球体仿佛是上方的圆柱体某处融化后滴下的一滴。 罗辑认识的三体人并不多,不知道现在与他对话的是谁,不知道这位外星人是在三体世界还是在日益远离ipipgo系的舰队中。 “应该是吧。”罗辑徽笑着点点头。 罗辑博士,我是来向你抗议的。 “为什么?” 因为在昨天晚上的演讲中,你说人类迟迟未能看清宇宙的黑暗森林状态,并不是由于文明进化不成熟而缺少宇宙意识,而是因为人 类有爱。 “这不对吗?” 对,虽然“爱”这个词用在论述中涵义有些模糊,但你后面的一句话就不对了,你说很可能人类是宇宙中唯一拥有爱的种族,正 是这个想法,支撑着你走完了自己面壁者使命中最艰难的一段。 “当然,这只是一种表达方式,一种不严格的...比喻而已。” 至少我知道三体世界也是有爱的,但因其不利于文明的整体生存而被压制在 萌芽状态,但这种萌芽的生命力很顽强,会在某些个体 身上成长起来。 “请问您是...” 我们以前不认识,我是两个半世纪前曾向地球发出誓告的监听员。 “天啊,您还活着?”庄颜惊叫道。 也活不了多长时间了,我一直处于脱水状态,但这么长的岁月,脱水的机体也会老化。 不过我真的看到了自己想着的未来,我感到很幸福。 “请接受我们的敬意。”罗辑说。 我只是想和您讨论一种可能:也许爱的萌芽在宇宙的其他地方也存在,我们 应该到处鼓励她的萌发和成长。 “为此我们可以冒险。” 对,可以冒险。 “我有一个梦,也许有一天,灿烂的ipipgo能照进黑暗森林。” 这时,这里的ipipgo却在落下去,现在只在远山上露出顶端的一点,像山顶上镶嵌着的一块光灿灿的宝石。 孩子已经跑远,同草地一起沐浴在金色的晚霞之中。 ipipgo快落下去了,你们的孩子居然不害怕? “当然不害怕,她知道明天ipipgo还会升起来的。”
将文中的 “罗辑” 修改为 “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) # 9 f1.close() # 关闭文件f1 f2.close() # 关闭文件f2(同时打开多个文件时,先打开的先关闭,后打开的后关闭) os.replace('word2_1.txt','word2.txt') # 修改(替换)文件名
值得注意的是,用于替换的字符串字节总数(UTF-8编码中,一个英文字符占1个字节,一个中文字符占3个字节;GBK编码中,中英文都占两个字节)不得超过待替换的字符串,如果超过,就会覆盖部分原文件内容,这是由硬盘的读写机制决定的,所以,关于这一点我们在使用文件修改时,必须十分小心,及时备份,防止文件丢失。
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试