您好,登錄后才能下訂單哦!
Python如何修改文件?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
Python修改文件的兩種方法
目錄:
一、以占用內存的方式修改文件
二、以占用硬盤的方式修改文件
引言
文件修改的方法從操作方式上大致可以分為兩類,一種是以占用電腦內存的方式,將文件讀取到內存中修改再存回硬盤;第二種方法是分別打開和新建一個文件,修改文件后寫入到新的文件中,直接保存到硬盤,即占用硬盤的方式。下面我們分別來探討一下兩種方法。
一、以占用內存的方式修改文件
待修改的文件 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) # 9 f1.close() # 關閉文件f1 f2.close() # 關閉文件f2(同時打開多個文件時,先打開的先關閉,后打開的后關閉) os.replace('word2_1.txt','word2.txt') # 修改(替換)文件名
值得注意的是,用于替換的字符串字節總數(UTF-8編碼中,一個英文字符占1個字節,一個中文字符占3個字節;GBK編碼中,中英文都占兩個字節)不得超過待替換的字符串,如果超過,就會覆蓋部分原文件內容,這是由硬盤的讀寫機制決定的,所以,關于這一點我們在使用文件修改時,必須十分小心,及時備份,防止文件丟失。
關于Python如何修改文件問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。