作者darkgerm (黑骏)
看板Python
标题Re: [问题] Python全文取代
时间Sun Jul 28 00:56:46 2013
※ 引述《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