如何替换包含python中特定字符的字符串?
问题描述:
我想用python来浏览一个文本文件,并用“0.0”替换包含子串“e-”的所有字符串。如何替换包含python中特定字符的字符串?
例如,在该行:
0.46790 0.25440 3.5637e-0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598
“3.5637e-0” 将由0.0代替。围绕“e-”的数字在每次出现时不一定相同。
如果可能的话,我想修改下面的代码(其中“ - ”被通过“-99”代替)要做到这一点,但我接受其他的建议,以及:
with open(outputfile, "wt") as fout:
with open(datafile, "rt") as fin:
for line in fin:
fout.write(line.replace('- ', '-99 '))
答
我行拆分,替换包含“e通”与“0.0”的任何元素,并重新加入:
fout.write(' '.join(['0.0' if 'e-' in x else x for x in line.split(' ')]))
答
在最后一行之前添加以下两行。
contents = [x.replace("e-", '0.0') for x in line.split()]
fout.write(' '.join(contents) + '\n')
这里做的事情是,它分裂line
每当空间得到满足,并在每一块应用replace
方法。这里我们利用了replace
这个事实,即使我们正在寻找的子字符串不在字符串中,也是有效的。修改完该行后,我们将它重新拼接在一起,追加一个换行符并将其写入文件。
答
你也可以使用一个regular expression,虽然它可能在这种情况下是矫枉过正。
import re
fout.write(re.sub(r"[\d.]+e-\d+", "0.0", line))
答
我的建议是使用正则表达式模块中类似的方式:
import re
import sys
def process_file(src, dst=sys.stdout):
for line in src:
dst.write(re.sub("\d+\.\d+e\-\d+", "0.0", line))
def main(paths):
for path in paths:
with open(path, "rb") as fp:
process_file(fp)
if __name__ == "__main__":
sys.exit(main(sys.argv[1:]))
如果我创建一个包含以下内容
0.46790 0.25440 3.5637e-0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598
0.46790 0.25440 3.5637e-0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598
并运行程序文件(称为example.py
)如下
$ python example.py test.txt test.txt
我得到以下输出
0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598
0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598
0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598
0.46790 0.25440 0.0 0.0082447 0.0016506 0.00018180 -99 0.0010338 0.00067166 0.0043598
你可以调整计划,以满足您的特定需求。