本文采用逐行解释的方法。python
第一步:把文件读取出来
第二部:再用'w'模式写入到新文件
第三部:把原文件删除,而且把新文件重命名回原文件
这样就实现了文件的修改操做函数
咱们先来看看原文件的内容操作系统
with open('xiakexing') as old_file: print(old_file.read())
赵客缦胡缨,吴钩霜雪明。银鞍照白马,飒沓如流星。 十步杀一人,千里不留行。事了拂衣去,深藏身与名。 闲过信陵饮,脱剑膝前横。将炙啖朱亥,持觞劝侯嬴。 三杯吐然诺,五岳倒为轻。眼花耳热后,意气素霓生。 救赵挥金锤,邯郸先震惊。千秋二壮士,烜赫大梁城。 纵死侠骨香,不惭世上英。谁能书阁下,白首太玄经。
咱们想要作的修改是把第二行的千里不留行改为“万里不流行”
补充说明:用with open()格式能够同时打开两个文件,本例中其实是打开文件xiakexing,而且建立文件xiakexing.bak,分别建立对应的文件对象old_file和new_filecode
with open('xiakexing') as old_file,open('xiakexing.bak','w') as new_file: #采用for循环从文件对象old_file里迭代地读取文件,简单来说就是一行一行地读取文件,这样内存中只存储了一行文件的内容,节省了内存,也防止文件过大时形成的“超载” for i in old_file: if '千里不留行' in i: #这里每读取一行咱们就对其进行条件判断,判断该行是不是咱们要找的那一行 i = i.replace('千','万')#当找到该行时,把该行的内容替换成咱们想要的内容 #每读取一行咱们就在新文件中写入一行,无论该行有没有变化,总之就是读一行、写一行、读一行、写一行 new_file.write(i) #当for循环结束后,文件也已经被咱们修改完毕了,这时应该删除旧文件,重命名新文件,为了实现这一目的,咱们引入了os模块,os模块内主要是一些和操做系统有关的函数 import os os.remove('xiakexing') #删除原文件 os.rename('xiakexing.bak','xiakexing') #把新文件重命名回原文件名,最终实现了文件的修改
而后咱们再来看看文件的内容对象
with open('xiakexing') as old_file: print(old_file.read())
赵客缦胡缨,吴钩霜雪明。银鞍照白马,飒沓如流星。 十步杀一人,万里不留行。事了拂衣去,深藏身与名。 闲过信陵饮,脱剑膝前横。将炙啖朱亥,持觞劝侯嬴。 三杯吐然诺,五岳倒为轻。眼花耳热后,意气素霓生。 救赵挥金锤,邯郸先震惊。千秋二壮士,烜赫大梁城。 纵死侠骨香,不惭世上英。谁能书阁下,白首太玄经。
这样,咱们就实现了文件的修改。因为咱们使用的是with open() as 的方法,因此不须要文件关闭的步骤,若是是经过file=open()的方式开打的文件,则必须在末尾加上关闭文件的语句。内存