看板 Python 關於我們 聯絡資訊
※ 引述《play9091 (長工)》之銘言: : 小弟有個疑問,請教先進…… : Python有沒有辦法做文本內容的取代呢? : 一般來說,有一個文本內容須要做一些取代的話會這麼做…… : for line in open("text.txt"): : line.replace(replace('mubb',mubb) str.replace 其實也可以做到啊~ s = open(filename).read().replace('aaa', 'bbb') open(filename).write(s) str.replace() 中的 str 也是可以有換行的 用 re.sub() 只是 pattern 可以用 regular expression 更強大而已 : 後來經過尋找方法後,知道 re.sub() 可以實現全文取代,如下 : newtext = re.sub(oldS,newS,open(filname,'r').read(),flags=re.I) : open(filname,'w').write(newtext) : 但在這邊我一個一疑問,上面用 re.sub() 的方法,只能取代一個字串,而且處理後還要把結果先存在一個 list 裡面,然後再寫到文本裡。 : 有沒有方法可以,取代多個字串呢? : 像在 BASH 裡面的話,會有像下面這樣子例子,可以一次取代多個字串 : sed -e "s/$old_locationArea/$locationArea/g" -e "s/$old_atmport/$atmport/g" 最簡單的方法就是寫兩次 ex: text = open(filename).read() text = re.sub(old_locationArea, locationArea, text, flags=re.I) text = re.sub(old_atmport, atmport, text, flags=re.I) open(filename).write(text) 如果檔案太大在意效能的話,或許可以這樣做 (我沒實測效能...) sub_dict = { old_locationArea: locationArea, old_atmport: atmport, } pattern = '|'.join(sub_dict.keys()) repl_func = lambda matchobj: sub_dict[matchobj.group(0)] text = re.sub(pattern, repl_func, open(filename).read()) open(filename, 'w').write(text) -- 光明 的背後 是 黑暗 黑暗 的背後 還是 黑暗 由此可知 黑暗 > 光明 Q.E.D. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.235.135