Python如何修改文件?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
Python修改文件的兩種方法
目錄:
一、以占用內(nèi)存的方式修改文件
二、以占用硬盤(pán)的方式修改文件
引言
文件修改的方法從操作方式上大致可以分為兩類(lèi),一種是以占用電腦內(nèi)存的方式,將文件讀取到內(nèi)存中修改再存回硬盤(pán);第二種方法是分別打開(kāi)和新建一個(gè)文件,修改文件后寫(xiě)入到新的文件中,直接保存到硬盤(pán),即占用硬盤(pán)的方式。下面我們分別來(lái)探討一下兩種方法。
一、以占用內(nèi)存的方式修改文件
待修改的文件 word1.txt,文件內(nèi)容如下:
沉默良久,這個(gè)為某種超出人類(lèi)理解力的力量代言的女人,冷酷地封死了汪淼的一切出路。 “三天后,也就是14日,在凌晨1點(diǎn)鐘至5點(diǎn)鐘,整個(gè)宇宙將為你閃爍?!? 他正坐在王府井天主教堂前。在黎明慘白的天空下,教堂的三個(gè)羅馬式尖頂像三根黑色的巨指,似乎在為他指出冥冥太空中的什么 東西。 汪淼起身要走,一陣從教堂傳出的圣樂(lè)留住了他。今天不是禮拜日,這可能是唱詩(shī)班為復(fù)活節(jié)進(jìn)行的排練,唱的是這個(gè)節(jié)日彌撒中 常唱的《圣靈光照》。在圣樂(lè)的莊嚴(yán)深遠(yuǎn)中,汪淼再次感到宇宙變小了,變成了一座空曠的教堂,穹頂隱沒(méi)于背景輻射閃爍的紅光 中,而他則是這宏偉教堂地板磚縫中的一只小螞蟻。他感覺(jué)到自己那顆顫抖的心靈被一只無(wú)形的巨手撫摸著,一時(shí)間回了脆弱無(wú)助 的孩童時(shí)代,意識(shí)深處硬撐著的某種東西像蠟一樣變軟了,崩潰了,他雙手捂著臉哭了起來(lái)。 “如果有人祈求佛主保佑另一個(gè)主,這是怎么回事呢?”我問(wèn),然后詳細(xì)地說(shuō)了事情的經(jīng)過(guò)。 長(zhǎng)老默默地看著自己手中的書(shū),但顯然沒(méi)有讀,而是在想我說(shuō)的事,然后他說(shuō):“你先出去一會(huì)兒,讓我想想?!蔽肄D(zhuǎn)身走出門(mén)去 ,知道這很不尋常:長(zhǎng)老學(xué)識(shí)深厚,一般的關(guān)于宗教、歷史和文化的問(wèn)題,他都能不假思索地立即回答。我在門(mén)外等了有一根煙 的時(shí)間,長(zhǎng)老叫我回去。 “我感覺(jué)只有一種可能?!彼裆珖?yán)峻地說(shuō)。 “什么?會(huì)是什么呢?難道可能有這種宗教,它的主需要其教徒祈求其它宗教的主來(lái)拯救?” “她的那個(gè)主,是真實(shí)存在的。” 我走出長(zhǎng)老的門(mén),穿過(guò)寺院朝自己的住處走去,這夜是滿月,我抬頭看看月亮,感覺(jué)那是盯著我看的一只銀色的怪眼,月光帶著一 股陰森的寒氣。 秦始皇、牛頓、馮.諾伊曼和汪淼站在金字塔頂部的平臺(tái)上,這個(gè)平臺(tái)與汪淼和墨子相遇時(shí)的很相似,架設(shè)著大量的天文觀測(cè)儀器 ,其中有一部分是歐洲近代的設(shè)備。在他們下方,三千萬(wàn)秦國(guó)軍隊(duì)宏偉的方陣鋪展在大地上,這是一個(gè)邊長(zhǎng)6公里的正方形。在初 升的太陽(yáng)下,方陣凝固了似的紋絲不動(dòng),仿佛一張由三千萬(wàn)個(gè)兵馬俑構(gòu)成的巨毯,但飛翔的鳥(niǎo)群誤入這巨毯上空時(shí),立刻感到了下 方濃重的殺氣,鳥(niǎo)群頓時(shí)大亂,驚慌混亂地退飛或繞行。汪淼在心里算了算,如果全人類(lèi)站成這樣一個(gè)方陣,面積也不過(guò)是上海浦 東大小,比起它表現(xiàn)的力量,這方陣更顯示了文明的脆弱。 汪淼聽(tīng)到一種不間斷的類(lèi)似于雷聲的轟鳴,這聲音是朝歌的大地上許多奇怪的東西發(fā)出的,那是一個(gè)個(gè)巨大的單擺,每個(gè)都有幾十 米高,單擺的擺錘是一塊塊巨石,被一大束繩索吊在架于兩座細(xì)高石塔間的天橋上,每座單擺都在擺動(dòng)中,驅(qū)動(dòng)它們的是一群群身 穿盔甲的士兵,每個(gè)巨擺下都有這樣一群士兵,他們合著奇怪的號(hào)子,齊力拉動(dòng)系在巨石擺錘上的繩索,維持著它的擺動(dòng)。汪淼發(fā) 現(xiàn),所有巨擺的擺動(dòng)都是同步的,遠(yuǎn)遠(yuǎn)看去,這景象怪異得使人著迷,像大地上豎立著一座座走動(dòng)的鐘表,又像自天而降的許多巨 大的抽象符號(hào)。 “這是伏曦,”紂王對(duì)剛進(jìn)來(lái)的周文王和汪淼介紹那位黑衣人,仿佛他們一直就在那兒似的,而黑衣人才是新來(lái)的,“他認(rèn)為,太 陽(yáng)是脾氣怪戾的大神,他醒著的時(shí)候喜怒無(wú)常,是亂紀(jì)元;睡著時(shí)呼吸均勻,是恒紀(jì)元。伏曦建議建起了外面那些大擺,日夜不停 地?cái)[動(dòng),聲稱(chēng)這對(duì)太陽(yáng)神有強(qiáng)烈的催眠作用,能使其陷入漫長(zhǎng)的沉睡。但直到現(xiàn)在,我們看到太陽(yáng)神仍醒著,最多只是不時(shí)打打盹 。” 一個(gè)大人和一個(gè)小孩兒站在死于武斗的紅衛(wèi)兵的墓前,那孩子問(wèn)大人:他們是烈士嗎?大人說(shuō)不是;孩子又問(wèn):他們是敵人嗎?大 人說(shuō)也不是;孩子再問(wèn):那他們是什么?大人說(shuō):是歷史。 伊文斯高舉一只拳頭,對(duì)著人群喊道:“消滅人類(lèi)暴政!” 和著濤聲和天線在風(fēng)中的轟鳴,三體戰(zhàn)士們齊聲高呼:“世界屬于三體!”這一天,被公認(rèn)為地球三體運(yùn)動(dòng)的誕生日。
我現(xiàn)在要將文中的“汪淼”修改為“WM”,代碼如下:
#!-*-coding:utf-8-*- old_str = '汪淼' new_str = 'WM' f1 = open('word1.txt','r+',encoding="utf-8") # 以讀寫(xiě)方式打開(kāi),可讀可寫(xiě) data = f1.read() # 讀取文件內(nèi)容 print(f1.tell()) # 4574 tell() 方法返回文件的當(dāng)前位置,即文件指針當(dāng)前位置。 f1.seek(0) # seek() 方法用于移動(dòng)文件讀取指針到指定位置。 for i in data: # 循環(huán)讀取 if old_str in data: data=data.replace(old_str,new_str) # 用新字符串替換舊字符串 print(data) # 打印修改后的內(nèi)容 f1.write(data) # 向文件中寫(xiě)入內(nèi)容(data),默認(rèn)是utf-8 f1.truncate() # 用于截?cái)辔募?,如果指定了可選參數(shù) size,則表示截?cái)辔募?nbsp;size 個(gè)字符。 如果沒(méi)有指定 size, 則從當(dāng)前位置起截?cái)?;截?cái)嘀?nbsp;size 后面的所有字符被刪除。 f1.close() # 關(guān)閉文件
二、以占用硬盤(pán)的方式修改文件
待修改的文件 word2.txt,文件內(nèi)容如下:
一片白云,云被風(fēng)吹到波束范圍外后就消散了,但新的云仍不斷在波束內(nèi)產(chǎn)生,使得那一片圓形的天空像是通向另一個(gè)云霧宇宙的時(shí)空 蝕洞,孩子看到后說(shuō)它像 一位巨人爺爺?shù)陌最^發(fā)。 羅輯和莊顏跟著在草地上奔跑的孩子,來(lái)到了天線下面。最初的兩個(gè)引力波系統(tǒng)分別建在歐洲和北美,它們的天線采用磁懸浮,只能從 基座上懸起幾厘米;而這個(gè)天線采用反重力,如果愿意,它可以一直升到太空中。 三人站在天線下方 的草地向上望,巨大的圓柱體從他們頭頂向前方伸延,像是從兩側(cè)向上卷曲的天空。 由于半徑很大,底面弧度很小,上面的映像并不失真。 這時(shí)夕陽(yáng)已經(jīng)照到天線下面,羅輯在映像中看到莊顏的長(zhǎng)發(fā)和白裙在金色的陽(yáng)光中飄動(dòng),像一個(gè)從天 空俯視地面的天使。 羅輯把孩子舉起來(lái),她的小手摸到了天線光潔的表面,她使勁向一個(gè)方向推著。 “我能讓它轉(zhuǎn)起來(lái)嗎?” “如果你推的時(shí)間足夠長(zhǎng),它會(huì)轉(zhuǎn)的。”莊顏回答,然后微笑著看著羅輯問(wèn),“是嗎?” 羅輯對(duì)莊顫點(diǎn)點(diǎn)頭:“如果時(shí)間足夠長(zhǎng),她能推動(dòng)地球呢?!?nbsp; 像已經(jīng)無(wú)數(shù)次發(fā)生過(guò)的那樣,他們的目光又交織在一起,這是兩個(gè)世紀(jì)前在蒙娜麗莎的微笑中那次對(duì)視的繼續(xù)。 他們發(fā)現(xiàn)莊顏設(shè)想的目光語(yǔ)言真的變成了現(xiàn)實(shí),或者說(shuō)相愛(ài)的人類(lèi)早就擁有了這種語(yǔ)言。 當(dāng)他們對(duì)視時(shí),豐富的涵義從目光 中涌出,就像引力波束形成的云之井中涌出的白云一般,無(wú)休無(wú)止。 但這不是這個(gè)世界的語(yǔ)言,它本身就構(gòu)筑了一個(gè)使自己有意義的世界,只有在那個(gè)玫瑰色的世界中,這種語(yǔ)言的所有詞匯才能找到 對(duì)應(yīng)物。 那個(gè)世界中的每一個(gè)人都是上帝, 都能在瞬間數(shù)清沙漠中的每一粒沙并記住它們,都能把星星串成晶瑩的項(xiàng)鏈掛到愛(ài)人的頸上... 這就是愛(ài)嗎? 這行字顯現(xiàn)在他們旁邊一個(gè)突然出現(xiàn)的低維展開(kāi)的智子上,這個(gè)鏡面球體仿佛是上方的圓柱體某處融化后滴下的一滴。 羅輯認(rèn)識(shí)的三體人并不多,不知道現(xiàn)在與他對(duì)話的是誰(shuí),不知道這位外星人是在三體世界還是在日益遠(yuǎn)離太陽(yáng)系的艦隊(duì)中。 “應(yīng)該是吧。”羅輯徽笑著點(diǎn)點(diǎn)頭。 羅輯博士,我是來(lái)向你抗議的。 “為什么?” 因?yàn)樵谧蛱焱砩系难葜v中,你說(shuō)人類(lèi)遲遲未能看清宇宙的黑暗森林狀態(tài),并不是由于文明進(jìn)化不成熟而缺少宇宙意識(shí),而是因?yàn)槿? 類(lèi)有愛(ài)。 “這不對(duì)嗎?” 對(duì),雖然“愛(ài)”這個(gè)詞用在科學(xué)論述中涵義有些模糊,但你后面的一句話就不對(duì)了,你說(shuō)很可能人類(lèi)是宇宙中唯一擁有愛(ài)的種族,正 是這個(gè)想法,支撐著你走完了自己面壁者使命中最艱難的一段。 “當(dāng)然,這只是一種表達(dá)方式,一種不嚴(yán)格的...比喻而已?!?nbsp; 至少我知道三體世界也是有愛(ài)的,但因其不利于文明的整體生存而被壓制在 萌芽狀態(tài),但這種萌芽的生命力很頑強(qiáng),會(huì)在某些個(gè)體 身上成長(zhǎng)起來(lái)。 “請(qǐng)問(wèn)您是...” 我們以前不認(rèn)識(shí),我是兩個(gè)半世紀(jì)前曾向地球發(fā)出誓告的監(jiān)聽(tīng)員。 “天啊,您還活著?”莊顏驚叫道。 也活不了多長(zhǎng)時(shí)間了,我一直處于脫水狀態(tài),但這么長(zhǎng)的歲月,脫水的機(jī)體也會(huì)老化。 不過(guò)我真的看到了自己想著的未來(lái),我感到很幸福。 “請(qǐng)接受我們的敬意?!绷_輯說(shuō)。 我只是想和您討論一種可能:也許愛(ài)的萌芽在宇宙的其他地方也存在,我們 應(yīng)該到處鼓勵(lì)她的萌發(fā)和成長(zhǎng)。 “為此我們可以冒險(xiǎn)?!?nbsp; 對(duì),可以冒險(xiǎn)。 “我有一個(gè)夢(mèng),也許有一天,燦爛的陽(yáng)光能照進(jìn)黑暗森林。” 這時(shí),這里的太陽(yáng)卻在落下去,現(xiàn)在只在遠(yuǎn)山上露出頂端的一點(diǎn),像山頂上鑲嵌著的一塊光燦燦的寶石。 孩子已經(jīng)跑遠(yuǎn),同草地一起沐浴在金色的晚霞之中。 太陽(yáng)快落下去了,你們的孩子居然不害怕? “當(dāng)然不害怕,她知道明天太陽(yáng)還會(huì)升起來(lái)的。”
將文中的 “羅輯” 修改為 “LJ”,代碼如下:
import os # 導(dǎo)入模塊 old_str = '羅輯' new_str = 'LJ' modify_times = 0 # 統(tǒng)計(jì)修改次數(shù) f1 = open('word2.txt','r',encoding='utf-8') # 以“r”(只讀)模式打開(kāi)舊文件 f2 = open('word2_1.txt','w',encoding='utf-8') # 以“w”(寫(xiě))模式打開(kāi)或創(chuàng)建新文件(寫(xiě)模式下,文件存在則重寫(xiě)文件,文件 不存在則創(chuàng)建文件) for lines in f1: # 循環(huán)讀 if old_str in lines: lines = lines.replace(old_str,new_str) # 新字符串替換舊字符串 modify_times += 1 # 每修改一次就自增一次 f2.write(lines) # 將修改后的內(nèi)容后的內(nèi)容寫(xiě)入新文件 print('文件修改的次數(shù):',modify_times) # 9 f1.close() # 關(guān)閉文件f1 f2.close() # 關(guān)閉文件f2(同時(shí)打開(kāi)多個(gè)文件時(shí),先打開(kāi)的先關(guān)閉,后打開(kāi)的后關(guān)閉) os.replace('word2_1.txt','word2.txt') # 修改(替換)文件名
值得注意的是,用于替換的字符串字節(jié)總數(shù)(UTF-8編碼中,一個(gè)英文字符占1個(gè)字節(jié),一個(gè)中文字符占3個(gè)字節(jié);GBK編碼中,中英文都占兩個(gè)字節(jié))不得超過(guò)待替換的字符串,如果超過(guò),就會(huì)覆蓋部分原文件內(nèi)容,這是由硬盤(pán)的讀寫(xiě)機(jī)制決定的,所以,關(guān)于這一點(diǎn)我們?cè)谑褂梦募薷臅r(shí),必須十分小心,及時(shí)備份,防止文件丟失。
關(guān)于Python如何修改文件問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。